FAST/FIX Kullanarak Basit Bir C++ Scalper Geliştirme: Adım Adım Kılavuz
Yüksek Frekanslı Alım Satım Mimarisi: Yüksek hızlı FIX/FAST ağ veri akışlarını işleyen bir C++ algoritmik botun görselleştirmesi.
Merhaba arkadaşlar! Bugün size FAST/FIX protokollerini kullanarak C++ dilinde ilk alım satım scalper botunuzu nasıl oluşturacağınızı göstereceğim. Pek çok kişi algoritmik alım satımın yalnızca hedge fon deneyimine sahip seçkin programcılara açık, son derece karmaşık bir şey olduğunu düşünür. Ama açıkçası: özellikle bir borsaya FAST/FIX üzerinden erişiminiz varsa küçükten başlayabilirsiniz.
Neye İhtiyacımız Var?
Koda dalmadan önce araç setimizi hazırlayalım:
- C++ derleyici (GCC, Clang veya MSVC)
- FIX/FAST ile çalışmak için kütüphane (ör. OnixS C++ FIX Engine)
- Kullanışlı bir IDE (Visual Studio, CLion veya favori olanınız)
- Bir fincan güçlü kahve (isteğe bağlı, ancak kesinlikle tavsiye edilir)
FIX/FAST Protokollerini Anlamak
Bir borsaya FAST/FIX üzerinden erişiminiz varsa muhtemelen şunu biliyorsunuzdur:
FIX (Financial Information eXchange), finansal bilgi alışverişi için standart bir protokoldür. "AL BTCUSD MİKTAR=1 FİYAT=50000" gibi telgrafları daha resmî bir formatta hayal edin.
FAST (FIX Adapted for Streaming), FIX'in yüksek hızlı veri transferi için optimize edilmiş "turbo versiyonudur". FIX normal posta ise FAST steroidli pnömatik postadır.

Scalper'ımızın Mimarisi
Kendine saygısı olan her scalper aşağıdaki bileşenlere sahip olmalıdır:
- Borsa bağlantı modülü – büyük para dünyasına köprümüz
- Piyasa verisi işleme modülü – "göz ve kulaklarımız"
- Karar verme modülü – "beynimiz"
- Emir yönetimi modülü – "ellerimiz"
- Risk yönetimi modülü – "öz-koruma içgüdümüz"
Gelecekteki botumuzun iskeletini çizelim:
#include <iostream>
#include <string>
#include <onixs/fix/engine.h> // FIX için varsayılan kütüphane
class SimpleScalper {
private:
// Bağlantı parametreleri
std::string senderCompID;
std::string targetCompID;
std::string fixVersion;
// Alım satım parametreleri
double stopLossPercentage = 0.05; // %5 stop-loss
double profitTargetPercentage = 0.1; // %10 kâr hedefi
double tradeAmount = 0.1; // Pozisyon büyüklüğü
// Alım satım durumu
bool inPosition = false;
double entryPrice = 0.0;
// FIX bağlantısı
onixs::fix::Session* session;
public:
SimpleScalper(const std::string& sender, const std::string& target, const std::string& version)
: senderCompID(sender), targetCompID(target), fixVersion(version) {
// FIX bağlantısını başlat
initializeFixConnection();
}
// Diğer metodlar...
};
Borsaya Bağlanma
Önce borsayla bağlantı kurmamız gerekiyor. Bu ilk el sıkışmaya benzer – mahvetmemek önemli:
void SimpleScalper::initializeFixConnection() {
// Oturum yapılandırmasını oluştur
onixs::fix::SessionConfig config;
config.setSenderCompID(senderCompID);
config.setTargetCompID(targetCompID);
config.setFixVersion(fixVersion);
// Bağlantı parametrelerini ayarla
config.setHost("exchange.hostname.com");
config.setPort(9823); // Borsa FIX portu
// Oturum oluştur ve başlat
session = new onixs::fix::Session(config);
// Olay işleyicilerini kaydet
session->setMessageHandler(std::bind(&SimpleScalper::onMessage, this, std::placeholders::_1));
// Bağlantıyı kur
if (!session->connect()) {
std::cerr << "Borsaya bağlanılamadı!" << std::endl;
} else {
std::cout << "Bağlantı kuruldu!" << std::endl;
}
}
Piyasa Verisi İşleme ve Karar Verme
Basitlik adına bir RSI göstergesi ve temel giriş/çıkış mantığı uygulayalım:
double calculateRSI(const std::vector<double>& prices, int period = 14) {
if (prices.size() < period + 1) return 50.0;
double sumGain = 0.0, sumLoss = 0.0;
for (size_t i = prices.size() - period; i < prices.size() - 1; ++i) {
double change = prices[i + 1] - prices[i];
if (change > 0) sumGain += change;
else sumLoss -= change;
}
if (sumLoss == 0) return 100.0;
double rs = sumGain / sumLoss;
return 100.0 - (100.0 / (1.0 + rs));
}

Borsaya Emir Gönderme
Stratejimiz "al" veya "sat" dediğinde ilgili emri borsaya göndermemiz gerekir. Bu bir restoranda sipariş vermek gibidir – hassas olmak önemlidir:
void SimpleScalper::sendBuyOrder(double amount, double price) {
std::cout << "ALIM emri gönderiliyor: " << amount << " @ " << price << std::endl;
// Burada FIX NewOrderSingle oluşturulur ve gönderilir
// ...
}
Borsa Yanıtlarını İşleme
void SimpleScalper::onMessage(const onixs::fix::Message& message) {
std::string msgType = message.getField(onixs::fix::Tag::MsgType);
if (msgType == "8") { // ExecutionReport
// Yürütme raporunu işle
} else if (msgType == "W") { // MarketDataSnapshotFullRefresh
// Piyasa verilerini işle
} else if (msgType == "3") { // Reject
std::string reason = message.getField(onixs::fix::Tag::Text);
std::cout << "Emir reddedildi: " << reason << std::endl;
}
}
Test ve Hata Ayıklama
Botumuzuzu gerçek parayla çalıştırmadan önce tarihsel veriler üzerinde veya simülasyon modunda test edelim. Bu, bir pilotin gerçek uçuştan önce simülatörde eğitim yapmasına benzer:
void testScalperOnHistoricalData() {
SimpleScalper scalper("TESTER", "EXCHANGE", "FIX.4.4");
std::vector<double> historicalPrices = loadHistoricalData("BTCUSD_1min_2023.csv");
for (const auto& price : historicalPrices) {
// piyasa verilerini taklit et
// scalper.processMarketData(...);
}
// scalper.printPerformanceStats();
}
Sonuç
Hepsi bu kadar! FAST/FIX protokollerini kullanan basit ama işlevsel bir C++ scalper oluşturduk. Elbette bu sadece başlangıç. Gerçek HFT sistemleri çok daha karmaşık ve optimize edilmiş olsa da böyle basit bir bot bile yeni başlayan bir algoritmik trader için faydalı olabilir.
Finansal piyasalarda alım satımın riskler içerdiğini ve algoritmik alım satımın bunların üstüne teknik riskler eklediğini unutmayın. Canlıya geçmeden önce stratejilerinizi her zaman tarihsel veriler üzerinde ve simülasyon modunda test edin.
En önemlisi – botunuzu öğrenmeye ve geliştirmeye devam edin. Piyasalar değişir ve algoritmalarınız onlarla birlikte uyum sağlamalıdır.
İyi alım satımlar ve scalper'ınız daima kârlı olsun!
Atıf
@software{soloviov2024scalpercppfastfix,
author = {Soloviov, Eugen},
title = {Developing a Simple C++ Scalper Using FAST/FIX: Step-by-Step Guide},
year = {2025},
url = {https://marketmaker.cc/tr/blog/post/scalper-cpp-fast-fix},
version = {0.1.0},
description = {FAST/FIX protokollerini kullanarak C++ ile bir alım satım scalper botu oluşturmaya yönelik adım adım kılavuz.}
}
Yazarlar
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.