← Makalelere geri dön
May 19, 2025
5 dakikalık okuma

FAST/FIX Kullanarak Basit Bir C++ Scalper Geliştirme: Adım Adım Kılavuz

FAST/FIX Kullanarak Basit Bir C++ Scalper Geliştirme: Adım Adım Kılavuz
#C++
#algoritmik alım satım
#scalping
#FIX
#FAST
#bot
#finans

C++ Scalper Botu 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.

Yüksek frekanslı scalper beş modüllü mimari

Scalper'ımızın Mimarisi

Kendine saygısı olan her scalper aşağıdaki bileşenlere sahip olmalıdır:

  1. Borsa bağlantı modülü – büyük para dünyasına köprümüz
  2. Piyasa verisi işleme modülü – "göz ve kulaklarımız"
  3. Karar verme modülü – "beynimiz"
  4. Emir yönetimi modülü – "ellerimiz"
  5. 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));
}

FIX protokolü emir yaşam döngüsü sırası

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.}
}
Sorumluluk Reddi: Bu makalede sağlanan bilgiler yalnızca eğitim ve bilgilendirme amaçlıdır ve finansal, yatırım veya ticaret tavsiyesi niteliği taşımaz. Kripto para ticareti önemli bir kayıp riski içerir.

Yazarlar

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Piyasanın Önünde Olun

Özel yapay zeka ticaret içgörüleri, piyasa analizi ve platform güncellemeleri için bültenimize abone olun.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.