使用 FAST/FIX 開發簡單 C++ 剝頭皮交易機器人:分步指南
高頻交易架構:一個處理高速 FIX/FAST 網路資料流的 C++ 演算法機器人的視覺化。
大家好!今天我將帶你用 C++ 和 FAST/FIX 協議開發你的第一個剝頭皮交易機器人。許多人認為演算法交易極其複雜,只屬於對沖基金的頂級程式設計師。但其實,只要你能通過 FAST/FIX 訪問交易所,就可以從簡單做起。
我們需要什麼?
在開始編碼之前,讓我們準備好工具箱:
- C++ 編譯器(GCC、Clang 或 MSVC)
- 用於 FIX/FAST 的庫(如 OnixS C++ FIX Engine)
- 順手的 IDE(Visual Studio、CLion 或你喜歡的)
- 一杯濃咖啡(可選,但強烈推薦)
瞭解 FIX/FAST 協議
如果你已經能通過 FAST/FIX 訪問交易所,你應該知道:
FIX(金融資訊交換協議) 是金融資訊交換的標準協議。可以想像成"BUY BTCUSD QTY=1 PRICE=50000"這樣的電報,只是更正式。
FAST(FIX 流式適配) 是 FIX 的"加速版",專為高速資料傳輸最佳化。如果說 FIX 是普通郵件,FAST 就是裝了火箭的氣動郵件。

剝頭皮機器人的架構
一個合格的剝頭皮機器人應包含以下模組:
- 交易所連線模組 —— 我們通往財富的橋樑
- 行情資料處理模組 —— 我們的"眼睛和耳朵"
- 決策模組 —— 我們的"大腦"
- 訂單管理模組 —— 我們的"手"
- 風控模組 —— 我們的"自我保護本能"
讓我們先搭建機器人的骨架:
#include <iostream>
#include <string>
#include <onixs/fix/engine.h> // 假设使用的 FIX 库
class SimpleScalper {
private:
// 连接参数
std::string senderCompID;
std::string targetCompID;
std::string fixVersion;
// 交易参数
double stopLossPercentage = 0.05; // 5% 止损
double profitTargetPercentage = 0.1; // 10% 止盈
double tradeAmount = 0.1; // 仓位大小
// 交易状态
bool inPosition = false;
double entryPrice = 0.0;
// FIX 连接
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 连接
initializeFixConnection();
}
// 其他方法...
};
連線交易所
首先,我們需要與交易所建立連線。這就像第一次握手——一定要穩:
void SimpleScalper::initializeFixConnection() {
// 创建会话配置
onixs::fix::SessionConfig config;
config.setSenderCompID(senderCompID);
config.setTargetCompID(targetCompID);
config.setFixVersion(fixVersion);
// 设置连接参数
config.setHost("exchange.hostname.com");
config.setPort(9823); // 交易所 FIX 端口
// 创建并初始化会话
session = new onixs::fix::Session(config);
// 注册事件处理器
session->setMessageHandler(std::bind(&SimpleScalper::onMessage, this, std::placeholders::_1));
// 建立连接
if (!session->connect()) {
std::cerr << "连接交易所失败!" << std::endl;
} else {
std::cout << "连接成功!" << std::endl;
}
}
行情處理與決策
為簡單起見,我們實現 RSI 指標和基礎的進出場邏輯:
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));
}

向交易所傳送訂單
當策略發出"買入"或"賣出"訊號時,我們需要向交易所傳送對應訂單。就像點菜一樣,要說清楚:
void SimpleScalper::sendBuyOrder(double amount, double price) {
std::cout << "发送买单: " << amount << " @ " << price << std::endl;
// 这里组装并发送 FIX NewOrderSingle
// ...
}
處理交易所響應
void SimpleScalper::onMessage(const onixs::fix::Message& message) {
std::string msgType = message.getField(onixs::fix::Tag::MsgType);
if (msgType == "8") { // ExecutionReport
// 处理成交回报
} else if (msgType == "W") { // MarketDataSnapshotFullRefresh
// 处理行情数据
} else if (msgType == "3") { // Reject
std::string reason = message.getField(onixs::fix::Tag::Text);
std::cout << "订单被拒绝: " << reason << std::endl;
}
}
測試與除錯
在用真金白銀執行機器人前,先用歷史資料或模擬模式測試。這就像飛行員先在模擬器訓練:
void testScalperOnHistoricalData() {
SimpleScalper scalper("TESTER", "EXCHANGE", "FIX.4.4");
std::vector<double> historicalPrices = loadHistoricalData("BTCUSD_1min_2023.csv");
for (const auto& price : historicalPrices) {
// 模拟行情数据
// scalper.processMarketData(...);
}
// scalper.printPerformanceStats();
}
總結
就是這樣!我們用 FAST/FIX 協議開發了一個簡單但實用的 C++ 剝頭皮機器人。當然,這只是開始。真正的高頻系統要複雜得多,但這樣一個機器人對初學者來說已經很有價值。
請記住,金融市場交易有風險,演算法交易還增加了技術風險。務必先用歷史資料和模擬模式充分測試你的策略。
最重要的是——不斷學習和最佳化你的機器人。市場在變,你的演算法也要隨之進化。
祝你交易順利,剝頭皮機器人帶來持續盈利!
引用
@software{soloviov2024scalpercppfastfix,
author = {Soloviov, Eugen},
title = {使用 FAST/FIX 开发简单 C++ 剥头皮交易机器人:分步指南},
year = {2025},
url = {https://marketmaker.cc/zh/blog/post/scalper-cpp-fast-fix},
version = {0.1.0},
description = {分步讲解如何用 FAST/FIX 协议开发 C++ 剥头皮交易机器人。}
}
Authors
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.