Hudson River Trading(HRT)作为全球顶尖的量化交易公司,其工程文化始终围绕三个核心:正确性(Correctness)、高效性(Efficiency)和可维护性(Maintainability)。本次Workshop通过构建订单簿(Order Book)和匹配引擎(Matching Engine),带我们深入体验高频交易系统的核心逻辑。
订单簿需要处理四类事件:
class Order:
def __init__(self, order_id, symbol, price, size, is_bid):
self.order_id = order_id
self.symbol = symbol
self.price = price
self.size = size
self.timestamp = time.time() # 时间优先级关键
orders
以O(1)复杂度快速检索bids
/asks
维护价格队列from sortedcontainers import SortedDict
class Book:
def __init__(self):
self.bids = SortedDict(lambda x: -x) # 买盘降序排列
self.asks = SortedDict() # 卖盘升序排列
self.orders = {} # order_id -> Order
通过订阅模式实现数据流解耦:
def sub_on_inside(self, callback):
self.callbacks.append(callback)
def _trigger_callbacks(self, symbol):
for cb in self.callbacks:
cb(symbol, self.get_best_bid(symbol), self.get_best_ask(symbol))
def match_order(self, incoming_order):
while incoming_order.size > 0:
best_opposite = self.get_best_opposite(incoming_order)
if not self._can_match(incoming_order, best_opposite):
break
# 执行成交逻辑...
# 正确性验证
./run_test.sh -c > submit.txt
# 性能压测
./run_test.sh -t 2>> submit.txt
# 完整流程测试
./run_test.sh -r
通过对比实际输出与预期结果(Golden Output),确保每次修改不破坏既有功能。
import logging
logger = logging.getLogger('order_book')
logger.addHandler(logging.FileHandler('book.log'))
通过实现订单簿和匹配引擎,我们深入理解了高频交易系统的核心机制。关键点在于:高效的数据结构选择、严格的事件处理顺序、可靠的异常处理机制。建议读者在实现基础功能后,可尝试扩展支持冰山订单、大宗交易等高级功能。
"The devil is in the details." —— 在高频交易系统中,微秒级的优化可能带来显著收益,但永远不要以牺牲正确性为代价。