一、开发环境搭建HFTrader高频交易系统作为QuantFabric量化交易系统的一部分,开发环境搭建与开源QuantFabric量化交易系统相同。二、HFTrader高频交易系统架构1、HFTrader功能特性HFTrader期货功能特性如下:
期货行情网关支持:CTP、REM期货交易柜台支持:CTP、REM、YD策略支持:单账户多策略风控支持:防自成交、撤单限制HFTrader股票功能特性支持如下:
华鑫Tora中泰XTP策略支持:单账户多策略风控支持:防自成交、委撤比限制2、HFTrader高频交易系统架构HFTrader高频交易组件是QuantFabric量化交易系统的一部分,与XMonitor监控客户端、XServer中间件、XWatcher监控组件、XMarketCenter行情网关、XTrader交易网关、XRiskJudge风控系统一起组成QuantFabric量化中高频交易系统。HFTrader高频交易系统架构如下:
HFTrader机构版:对于拥有Colo托管交易服务器完整使用权限的交易机构、团队或个人用户,HFTrader高频交易系统由XMonitor监控客户端、XServer中间件、XWatcher监控组件、HFTrader交易组件四个组件构成。HFTrader轻量版:对于只拥有Colo托管交易服务器部分资源(如只能使用2个CPU)使用权限的个人用户(通常只有一个交易账户),HFTrader高频交易系统由XMonitor监控客户端、XServer中间件、HFTrader交易组件三个组件构成。三、HFTrader高频交易系统展示1、开发服务器开发测试服务器由深圳塞克普斯提供,交易服务器配置如下:
CPU:Intel Core i9-10980XE 18核内存:32GB磁盘:480GB SSD网卡:低延迟网卡SolarFlare X2522 x 1, 普通万兆网卡 x 1开发测试服务器环境:
CentOS 7.9GCC编译器:GCC 9.3.12、HFTrader交易系统展示XMonitor监控客户端Monitor插件:
XMonitor监控客户端OrderManager插件:
XMonitor监控客户端RiskJudge插件:
3、HFTrader性能指标CPU超频至5.0GHZ,并绑定CPU到线程配置CTP行情网关和CTP交易网关,使用上期技术SimNow测试环境,使用简单高频策略进行交易,HFTrader性能延迟数据如下:Perf Indicator:Tick2Order(ns)
count: 219
min: 1008
max: 4184
first: 1008
mean: 1851.33
median: 1762
std: 530.66
10%: 1312
20%: 1414
30%: 1548
40%: 1672
50%: 1762
60%: 1856
70%: 1958
75%: 2044
80%: 2146
85%: 2276
90%: 2542
95%: 3070
99%: 3510
HFTrader共计报单219笔,Tick2Order最大延迟4184ns,最小延迟1008ns,延迟中位数1762ns,90%分位数2542ns,99%分位数3510ns。四、HFTrader高频交易系统开发指南1、HFTrader配置HFTrader交易组件配置如下:HFTraderConfig:
Account : xxxxxx
XWatcherIP: 127.0.0.1
XWatcherPort: 6001
MarketGateWay: CTPMarketGateWay
TraderGateWay: CTPTraderGateWay
StrategyFactory: FutureStrategyFactory
MarketConfig: /home/xtrader/Test/HFTrader/Config/HFTraderXXX.yml
TraderConfig: /home/xtrader/Test/HFTrader/Config/HFTraderXXX.yml
SnapShot: true
SnapShotPath: /home/xtrader/Test/HFTrader/Bin/FutureData.bin
Colo: XServer
CPUSET: 12, 13
AutoTrade: true
StrategyList:
-
Name: LatencyTestStrategy
ExchangeID: DCE
ConfigPath:
ContinuousAuctionPeriod:
- 21:00:00.000-23:00:00.000
- 09:00:00.000-10:15:00.000
- 10:30:00.000-11:30:00.000
- 13:30:00.000-15:00:00.000
Interval: 250
CloseTick: 10
TickerListPath: /home/xtrader/Test/HFTrader/Config/TickerList.yml
MarketConfig:
CallAuctionPeriod: 20:59:00.000
ContinuousAuctionPeriod:
- 21:00:00.000-23:00:00.000
- 09:00:00.000-10:15:00.000
- 10:30:00.000-11:30:00.000
- 13:30:00.000-15:00:00.000
Interval: 250
Interface:
LocalIP:
MultiCastIP:
LocalPort:
TickerListPath: /home/xtrader/Test/HFTrader/Config/TickerList.yml
APIErrorPath: /home/xtrader/Test/HFTrader/Config/YDError.yml
# CTP:FrontAddr REM: LoginID
Extend1:
# CTP:BrokerID REM: PassWord
Extend2:
# CTP: UserID REMTCP: IP REMUDP: ExchangeID
Extend3:
# CTP: PassWord REMTCP: Port
Extend4:
Extend5:
TraderConfig:
Broker: ZX
Product: ZX_Product_1
ExchangeID: CFFEX
BussinessType: 3
BrokerID : xxxx
Account : xxxxxx
Password : 123456
AppID : xxxxx
AuthCode : xxxxxxxxxxxxxxxxxx
QryFund: true
CancelAll: true
CloseToday: false
TickerCancelLimit: 300
TickerListPath: /home/xtrader/Test/HFTrader/Config/TickerList.yml
APIErrorPath: /home/xtrader/Test/HFTrader/Config/YDError.yml
# CTP:FrontAddr YD: YD API Config file REM: EES Trader Lib Path
Extend1:
# REM: TradeServerIP
Extend2:
# REM: TradeServerPort
Extend3:
# REM: TradeServerUDPPort
Extend4:
# REM: QueryServerIP
Extend5:
# REM: QueryServerPort
Extend6:
# REM: QuoteServerIP
Extend7:
# REM: QuoteServerPort
Extend8:
# REM: LocalTradeIP
Extend9:
# REM: LocalTradeUDPPort
Extend10:
TickerList.yml配置文件如下:TickerList:
-
TickerIndex: 0
Ticker: IC2209
ExchangeID: CFFEX
PriceTick: 0.2
-
TickerIndex: 1
Ticker: IC2210
ExchangeID: CFFEX
PriceTick: 0.2
-
TickerIndex: 2
Ticker: IC2212
ExchangeID: CFFEX
PriceTick: 0.2
XXXError.yml错误配置文件如下:Error:
-
Code: 0
Error: CTP-正确
-
Code: 1
Error: CTP-不在已同步状态
-
Code: 2
Error: CTP-会话信息不一致
-
Code: 3
Error: CTP-不合法的登录
-
Code: 4
Error: CTP-用户不活跃
-
Code: 5
Error: CTP-重复的登录
2、HFTrader线程模型HFTrader线程模型如下:
HFTrader包括行情、策略、交易、监控四个模块,每个模块创建一个线程运行,其中行情、策略、交易建议分别绑定隔离CPU提高性能,HFTrader进程启动时建议绑定CPU,因此每个HFTrader实例占用4个CPU。3、自定义策略期货交易策略必须从FutureStrategy派生,并实现如下接口:virtual void LoadStrategyConfig(const ConfigUtil::StrategyProperty& Config) = 0;
virtual void OnFastOrder(const Message::TFastOrder& FastOrder) = 0;
virtual void OnFutureData(const HFTrader::TFutureMarketData& data, uint32_t TickerIndex) = 0;
virtual void OnHistoryData(const HFTrader::TFutureMarketData& data, uint32_t TickerIndex) = 0;
LoadStrategyConfig:加载具体策略配置。OnFastOrder:推送订单状态。OnFutureData:推送实时行情数据,计算信号,执行交易信号,进行报单、撤单。OnHistoryData:推送历史行情数据,HFTrader在交易时段重启会丢失最近行情数据。股票交易策略必须从StockStrategy派生,并实现如下接口:virtual void OnStockData(const HFTrader::TStockMarketData& data, uint32_t TickerIndex) = 0;
virtual void OnTickOrder(const HFTrader::TTickOrder& data, uint32_t TickerIndex) = 0;
virtual void OnTickTrade(const HFTrader::TTickTrade& data, uint32_t TickerIndex) = 0;
virtual void OnOrderBook(const HFTrader::TOrderBook& data, uint32_t TickerIndex) = 0;
OnStockData:推送快照行情OnTickOrder: 推送逐笔委托OnTickTrade: 推送逐笔成交OnOrderBook: 推送订单簿成员对象:protected:
uint32_t m_StrategyID;
ConfigUtil::StrategyProperty m_StrategyProperty;
std::vector
typedef phmap::flat_hash_map phmap::priv::hash_default_hash phmap::priv::hash_default_eq std::allocator TickerPropertyMapT; TickerPropertyMapT m_TickerPropertyMap; uint64_t m_CurrentSectionStart; uint64_t m_CurrentSectionEnd; typedef phmap::flat_hash_map phmap::priv::hash_default_hash phmap::priv::hash_default_eq std::allocator TickerIndexMapT; TickerIndexMapT m_TickerIndexMap; typedef phmap::flat_hash_map phmap::priv::hash_default_hash phmap::priv::hash_default_eq std::allocator OrderStatusMapT; OrderStatusMapT m_OrderStatusMap; static Message::TAccountFund m_AccountFund; static phmap::flat_hash_map phmap::priv::hash_default_hash phmap::priv::hash_default_eq std::allocator m_LastAccountPositionMap; Message::TFastOrder m_FastOrder; protected: static phmap::flat_hash_map phmap::priv::hash_default_hash phmap::priv::hash_default_eq std::allocator m_LastFutureMarketDataMap; 上述数据结构可以在具体策略中直接使用,但不需要维护。报单、撤单接口如下:protected: void SendOrder(const Message::TFastOrder& FastOrder); void CancelOrder(uint32_t OrderRef); SendOrder用于报单,可以复用预定义m_FastOrder成员对象,只填写部分字段,减少开销。m_FastOrder成员对象的通用字段在具体策略构造函数或策略配置加载函数内填写。CancelOrder用于撤单,只用填写挂单的OrderRef即可。 推荐参考学习资料: 量化IT技术专栏 QuantFabric开源量化交易系统 #高频交易##量化交易##HFTrader#