← 返回博客列表
Optiver

Optiver 2024 Campus 軟體工程師測試真題披露

2025-10-22

Optiver 2024 校招軟體工程師測試真題。oavoservice 分享完整題目和高頻考點,助你準備量化交易公司面試。

📋 題目一:訂單簿實作

實作一個簡化的訂單簿(Order Book)資料結構。

核心功能

import heapq
from collections import defaultdict

class OrderBook:
    def __init__(self):
        self.bids = []  # 買單(最大堆)
        self.asks = []  # 賣單(最小堆)
        self.orders = {}  # {order_id: order_info}
    
    def add_order(self, order_id, side, price, quantity):
        order = {
            'id': order_id,
            'side': side,
            'price': price,
            'quantity': quantity
        }
        
        self.orders[order_id] = order
        
        if side == 'buy':
            heapq.heappush(self.bids, (-price, order_id))
        else:
            heapq.heappush(self.asks, (price, order_id))
    
    def cancel_order(self, order_id):
        if order_id in self.orders:
            del self.orders[order_id]
            return True
        return False
    
    def get_best_bid(self):
        while self.bids:
            price, order_id = self.bids[0]
            if order_id in self.orders:
                return -price
            heapq.heappop(self.bids)
        return None
    
    def get_best_ask(self):
        while self.asks:
            price, order_id = self.asks[0]
            if order_id in self.orders:
                return price
            heapq.heappop(self.asks)
        return None
    
    def get_spread(self):
        best_bid = self.get_best_bid()
        best_ask = self.get_best_ask()
        
        if best_bid and best_ask:
            return best_ask - best_bid
        return None

📋 題目二:市場數據分析

計算移動平均和波動率。

實作

from collections import deque

class MarketDataAnalyzer:
    def __init__(self, window_size):
        self.window_size = window_size
        self.prices = deque(maxlen=window_size)
    
    def add_price(self, price):
        self.prices.append(price)
    
    def get_moving_average(self):
        if not self.prices:
            return None
        return sum(self.prices) / len(self.prices)
    
    def get_volatility(self):
        if len(self.prices) < 2:
            return None
        
        mean = self.get_moving_average()
        variance = sum((p - mean) ** 2 for p in self.prices) / len(self.prices)
        return variance ** 0.5

💼 oavoservice 助力

量化知識 - 訂單簿和市場數據 資料結構 - 堆積和佇列的應用 性能優化 - 高頻交易場景

聯繫 oavoservice,專業量化面試輔助!


標籤: #Optiver #量化交易 #訂單簿 #OA #OA代做 #面試輔助 #一畝三分地


需要面試真題? 立刻聯繫微信 Coding0201獲得真題