← Torna agli articoli
May 19, 2025
5 min di lettura

Sviluppo di un Semplice Scalper in C++ con FAST/FIX: Guida Passo dopo Passo

Sviluppo di un Semplice Scalper in C++ con FAST/FIX: Guida Passo dopo Passo
#C++
#trading algoritmico
#scalping
#FIX
#FAST
#bot
#finanza

Bot Scalper in C++ Architettura di Trading ad Alta Frequenza: Una visualizzazione di un bot algoritmico in C++ che elabora flussi di dati di rete FIX/FAST ad alta velocità.

Ciao, amici! Oggi vi mostrerò come costruire il vostro primo bot scalper di trading in C++ utilizzando i protocolli FAST/FIX. Molti credono che il trading algoritmico sia qualcosa di estremamente complesso, accessibile solo a programmatori d'élite con esperienza negli hedge fund. Ma siamo onesti: si può iniziare in piccolo, soprattutto se avete già accesso a un exchange tramite FAST/FIX.

Di Cosa Abbiamo Bisogno?

Prima di immergerci nel codice, prepariamo il nostro kit di strumenti:

  • Compilatore C++ (GCC, Clang o MSVC)
  • Libreria per lavorare con FIX/FAST (ad es. OnixS C++ FIX Engine)
  • Un IDE conveniente (Visual Studio, CLion o il vostro preferito)
  • Una tazza di caffè forte (opzionale, ma altamente consigliata)

Comprensione dei Protocolli FIX/FAST

Se avete già accesso a un exchange tramite FAST/FIX, probabilmente sapete che:

FIX (Financial Information eXchange) è un protocollo standard per lo scambio di informazioni finanziarie. Immaginate telegrammi come "ACQUISTA BTCUSD QTY=1 PRICE=50000", ma in un formato più formalizzato.

FAST (FIX Adapted for Streaming) è una "versione turbo" di FIX, ottimizzata per il trasferimento di dati ad alta velocità. Se FIX è la posta ordinaria, FAST è la posta pneumatica sotto steroidi.

Architettura a cinque moduli dello scalper ad alta frequenza

L'Architettura del Nostro Scalper

Qualsiasi scalper che si rispetti dovrebbe avere i seguenti componenti:

  1. Modulo di connessione all'exchange – il nostro ponte verso il mondo del grande denaro
  2. Modulo di elaborazione dei dati di mercato – i nostri "occhi e orecchie"
  3. Modulo decisionale – il nostro "cervello"
  4. Modulo di gestione degli ordini – le nostre "mani"
  5. Modulo di gestione del rischio – il nostro "istinto di autoconservazione"

Sketchiamo lo scheletro del nostro futuro bot:

#include <iostream>
#include <string>
#include <onixs/fix/engine.h>   // Presumed library for FIX

class SimpleScalper {
private:
    // Connection parameters
    std::string senderCompID;
    std::string targetCompID;
    std::string fixVersion;
    
    // Trading parameters
    double stopLossPercentage = 0.05;  // 5% stop-loss
    double profitTargetPercentage = 0.1;  // 10% profit target
    double tradeAmount = 0.1;  // Position size
    
    // Trading state
    bool inPosition = false;
    double entryPrice = 0.0;
    
    // FIX connection
    onixs::fix::Session* session;

public:
    SimpleScalper(const std::string& sender, const std::string& target, const std::string& version) 
        : senderCompID(sender), targetCompID(target), fixVersion(version) {
        // Initialize FIX connection
        initializeFixConnection();
    }
    
    // Other methods...
};

Connessione all'Exchange

Prima di tutto, dobbiamo stabilire una connessione con l'exchange. È come una prima stretta di mano – è importante non sbagliare:

void SimpleScalper::initializeFixConnection() {
    // Create session configuration
    onixs::fix::SessionConfig config;
    config.setSenderCompID(senderCompID);
    config.setTargetCompID(targetCompID);
    config.setFixVersion(fixVersion);
    
    // Set connection parameters
    config.setHost("exchange.hostname.com");
    config.setPort(9823);  // Exchange FIX port
    
    // Create and initialize session
    session = new onixs::fix::Session(config);
    
    // Register event handlers
    session->setMessageHandler(std::bind(&SimpleScalper::onMessage, this, std::placeholders::_1));
    
    // Establish connection
    if (!session->connect()) {
        std::cerr << "Failed to connect to the exchange!" << std::endl;
    } else {
        std::cout << "Connection established!" << std::endl;
    }
}

Elaborazione dei Dati di Mercato e Processo Decisionale

Per semplicità, implementiamo un indicatore RSI e la logica di base per l'entrata/uscita:

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));
}

Sequenza del ciclo di vita degli ordini nel protocollo FIX

Invio degli Ordini all'Exchange

Quando la nostra strategia dice "acquista" o "vendi", dobbiamo inviare l'ordine corrispondente all'exchange. È come ordinare al ristorante – bisogna essere precisi:

void SimpleScalper::sendBuyOrder(double amount, double price) {
    std::cout << "Sending BUY order: " << amount << " @ " << price << std::endl;
    // Here we form and send a FIX NewOrderSingle
    // ...
}

Gestione delle Risposte dell'Exchange

void SimpleScalper::onMessage(const onixs::fix::Message& message) {
    std::string msgType = message.getField(onixs::fix::Tag::MsgType);
    if (msgType == "8") {  // ExecutionReport
        // Handle execution report
    } else if (msgType == "W") {  // MarketDataSnapshotFullRefresh
        // Handle market data
    } else if (msgType == "3") {  // Reject
        std::string reason = message.getField(onixs::fix::Tag::Text);
        std::cout << "Order rejected: " << reason << std::endl;
    }
}

Test e Debug

Prima di far girare il nostro bot con denaro reale, testiamolo su dati storici o in modalità simulazione. È come un pilota che si allena su un simulatore prima di un volo reale:

void testScalperOnHistoricalData() {
    SimpleScalper scalper("TESTER", "EXCHANGE", "FIX.4.4");
    std::vector<double> historicalPrices = loadHistoricalData("BTCUSD_1min_2023.csv");
    for (const auto& price : historicalPrices) {
        // emulate market data
        // scalper.processMarketData(...);
    }
    // scalper.printPerformanceStats();
}

Conclusione

Ecco fatto! Abbiamo costruito un semplice ma funzionale scalper in C++ utilizzando i protocolli FAST/FIX. Naturalmente, questo è solo l'inizio. I sistemi HFT reali sono molto più complessi e ottimizzati, ma anche un bot così semplice può essere utile per un trader algoritmico alle prime armi.

Ricordate, il trading sui mercati finanziari comporta dei rischi, e il trading algoritmico aggiunge rischi tecnici in cima a questi. Testate sempre le vostre strategie su dati storici e in modalità simulazione prima di andare in produzione.

E soprattutto – continuate a imparare e a migliorare il vostro bot. I mercati cambiano, e i vostri algoritmi devono adattarsi con loro.

Buon trading, e che il vostro scalper sia sempre redditizio!

Citazione

@software{soloviov2024scalpercppfastfix,
  author = {Soloviov, Eugen},
  title = {Developing a Simple C++ Scalper Using FAST/FIX: Step-by-Step Guide},
  year = {2025},
  url = {https://marketmaker.cc/it/blog/post/scalper-cpp-fast-fix},
  version = {0.1.0},
  description = {Una guida passo dopo passo per costruire uno scalper bot di trading in C++ utilizzando i protocolli FAST/FIX.}
}
Disclaimer: le informazioni fornite in questo articolo hanno solo scopo didattico e informativo e non costituiscono consulenza finanziaria, di investimento o di trading. Il trading di criptovalute comporta un rischio significativo di perdita.

Autori

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

Resta un Passo Avanti al Mercato

Iscriviti alla nostra newsletter per approfondimenti esclusivi sul trading con IA, analisi di mercato e aggiornamenti sulla piattaforma.

Rispettiamo la tua privacy. Annulla l'iscrizione in qualsiasi momento.