Membangunkan Scalper C++ Mudah Menggunakan FAST/FIX: Panduan Langkah demi Langkah
Seni Bina Perdagangan Frekuensi Tinggi: Visualisasi bot algoritmik C++ yang memproses aliran data rangkaian FIX/FAST berkelajuan tinggi.
Halo, rakan-rakan! Hari ini, saya akan tunjukkan cara membina bot scalper perdagangan pertama anda dalam C++ menggunakan protokol FAST/FIX. Ramai yang percaya bahawa perdagangan algoritmik adalah sesuatu yang sangat kompleks, hanya boleh diakses oleh pengaturcara elit yang berpengalaman dalam dana lindung nilai. Tetapi mari kita jujur: anda boleh bermula dengan skala kecil, terutamanya jika anda sudah mempunyai akses ke bursa melalui FAST/FIX.
Apa Yang Kita Perlukan?
Sebelum kita menyelami kod, mari kita sediakan peralatan kita:
- Pengkompil C++ (GCC, Clang, atau MSVC)
- Perpustakaan untuk bekerja dengan FIX/FAST (contohnya, OnixS C++ FIX Engine)
- IDE yang mudah digunakan (Visual Studio, CLion, atau kegemaran anda)
- Secawan kopi pekat (pilihan, tetapi sangat disyorkan)
Memahami Protokol FIX/FAST
Jika anda sudah mempunyai akses ke bursa melalui FAST/FIX, anda mungkin sudah tahu bahawa:
FIX (Financial Information eXchange) adalah protokol standard untuk pertukaran maklumat kewangan. Bayangkan telegram seperti "BUY BTCUSD QTY=1 PRICE=50000", tetapi dalam format yang lebih formal.
FAST (FIX Adapted for Streaming) adalah "versi turbo" FIX, dioptimumkan untuk pemindahan data berkelajuan tinggi. Jika FIX adalah mel biasa, FAST adalah mel pneumatik berkuasa steroid.

Seni Bina Scalper Kita
Mana-mana scalper yang dihormati harus mempunyai komponen berikut:
- Modul sambungan bursa – jambatan kita ke dunia wang besar
- Modul pemprosesan data pasaran – "mata dan telinga" kita
- Modul membuat keputusan – "otak" kita
- Modul pengurusan pesanan – "tangan" kita
- Modul pengurusan risiko – "naluri mempertahankan diri" kita
Mari kita lakarkan kerangka bot masa depan kita:
#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...
};
Menyambung ke Bursa
Pertama, kita perlu mewujudkan sambungan ke bursa. Ini seperti jabat tangan pertama – penting untuk tidak tersalah:
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;
}
}
Pemprosesan Data Pasaran dan Membuat Keputusan
Untuk kesederhanaan, mari kita laksanakan penunjuk RSI dan logik masuk/keluar asas:
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));
}

Menghantar Pesanan ke Bursa
Apabila strategi kita berkata "beli" atau "jual", kita perlu menghantar pesanan yang sepadan ke bursa. Ini seperti membuat pesanan di restoran – anda perlu tepat:
void SimpleScalper::sendBuyOrder(double amount, double price) {
std::cout << "Sending BUY order: " << amount << " @ " << price << std::endl;
// Here we form and send a FIX NewOrderSingle
// ...
}
Menangani Respons Bursa
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;
}
}
Pengujian dan Penyahpepijatan
Sebelum menjalankan bot kita dengan wang sebenar, mari kita uji pada data sejarah atau dalam mod simulasi. Ini seperti juruterbang yang berlatih pada simulator sebelum penerbangan sebenar:
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();
}
Kesimpulan
Itulah dia! Kita telah membina scalper C++ yang mudah tetapi berfungsi menggunakan protokol FAST/FIX. Sudah tentu, ini hanyalah permulaan. Sistem HFT sebenar jauh lebih kompleks dan dioptimumkan, tetapi bahkan bot yang begitu mudah ini boleh berguna untuk pedagang algoritmik pemula.
Ingat, berdagang di pasaran kewangan melibatkan risiko, dan perdagangan algoritmik menambah risiko teknikal di atasnya. Sentiasa uji strategi anda pada data sejarah dan dalam mod simulasi sebelum memulakan secara langsung.
Dan yang paling penting – teruskan belajar dan memperbaiki bot anda. Pasaran berubah, dan algoritma anda mesti menyesuaikan diri bersamanya.
Selamat berdagang, dan semoga scalper anda sentiasa menguntungkan!
Rujukan
@software{soloviov2024scalpercppfastfix,
author = {Soloviov, Eugen},
title = {Developing a Simple C++ Scalper Using FAST/FIX: Step-by-Step Guide},
year = {2025},
url = {https://marketmaker.cc/ms/blog/post/scalper-cpp-fast-fix},
version = {0.1.0},
description = {Panduan langkah demi langkah untuk membina bot scalper perdagangan C++ menggunakan protokol FAST/FIX.}
}
Pengarang
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.