下面是有根據檔案內容的、非常清楚的比較,不講廢話。所有說法我都會引用你檔案中的程式碼來證明。
📌結論先講:Avellaneda 版本比原始 bot 強在 3 件事 功能 原本 bot.py Avellaneda_bot.py 下單價格 固定間距的網格價格 動態數學模型計算理論最優價格 策略 簡單網格 市場做市策略(Avellaneda–Stoikov) 風險控制 固定間距、死算法 會根據波動、手續費、倉位自動調整
所以本質上:
bot.py = 傳統網格 avellaneda_bot.py = 聰明網格 + 做市策略
① Bot.py 的做單邏輯比較笨(固定價格)
來看 bot.py 中下網格價格的方式:
它的買/賣價格是:
Mid ± 固定 spacing
例如:
self.upper_price_long = self.mid_price_long * (1 + self.take_profit_spacing) self.lower_price_long = self.mid_price_long * (1 - self.grid_spacing)
來源:
bot
換句話說:
不管市場波動大還小,都用同樣的間距。
問題:如果市場突然變動,你的網格還是一樣,容易虧錢或成交不到。
② Avellaneda 版本會依市場條件自動算價格
看 avellaneda_bot.py 的核心公式:
self.reserve_price = price - self.inventory * self.gamma * (self.sigma**2) * T
來源:
avellaneda_bot
這就是論文 Avellaneda–Stoikov 的 理論公允價格。
接著算最佳買/賣價格:
self.best_bid = self.reserve_price - delta self.best_ask = self.reserve_price + delta
來源:
avellaneda_bot
這代表:
價格不是固定死的,而是根據市場變動自動算出來的。
③ Avellaneda 會根據波動率 sigma 自動調整間距
avellaneda_utils.py 會抓 K 線資料與計算波動:
AVE_SIGMA = calculate_historical_volatility(kline_df)
來源:
avellaneda_utils
sigma 高 = 市場波動大 → 網格變大 sigma 小 = 市場安靜 → 網格變小
而原始版本做不到這件事。
④ Avellaneda 會把手續費成本也考慮進去 AVE_ETA = estimate_eta_from_fee(taker_fee_rate)
來源:
avellaneda_utils
這超重要!
一般網格策略完全無視交易成本,所以:
波動小的時候可能完全是白做,虧在手續費。
Avellaneda 策略會把成本考進公式,讓你保持正收益。
⑤ Avellaneda 策略直接覆蓋原本的網格邏輯
在下單邏輯這裡你會看到:
self.place_order('buy', self.best_bid ...) self.place_take_profit_order(... self.best_ask ...)
來源:
avellaneda_bot
而原本版是:
self.place_take_profit_order(... self.upper_price_long) self.place_order(... self.lower_price_long)
來源:
bot
差別非常大:
舊版 新版 固定 upper/lower 動態 best_bid/best_ask 死策略 自適應 ⑥ Avellaneda 還考慮「你的持倉方向」 self.inventory = self.long_position - self.short_position
來源:
avellaneda_bot
如果你倉位偏多:
會調整報價來減少風險
原本 bot 完全不懂這件事。
💡所以最本質差異: ✔ Bot.py:永遠固定網格 價格固定間距
✔ Avellaneda:模型算出網格 根據波動、市場狀態、自身倉位 自動調整最佳買賣價
換句話說:
Avellaneda_bot.py 真正有「大腦」。 bot.py 只是機械地下單。
用人話總結 項目 bot.py avellaneda_bot.py 像什麼? 笨笨的網格 做市策略,像交易員 盤整行情 還行 非常強 高波動 容易爆倉或亂單 自調保護 手續費控制 沒有 內建 對市場理解 0 高級數學模型 最後一句讓你懂透
bot.py 是一般散戶在用的策略 avellaneda_bot.py 是交易所做市商在用的策略