Updating the Volume Curve Intraday: Does Adaptive Forecasting Actually Help?
Dalam TWAP, VWAP dan POV kami menjalankan ketiga-tiga penjadual secara head-to-head pada replay L2 BTCUSDT selama 90 hari, lalu mencapai kesimpulan yang sengaja dibiarkan sebagai luka terbuka: dalam kripto, lengkung volum ialah pautan paling lemah dalam saluran paip, bukannya pembahagian. Artikel itu menerbitkan versi mudah dengan sengaja — lengkung berasaskan median, dikondisikan oleh hari-minggu × masa-hari, dipasang semula setiap minggu dan dikekalkan statik sepanjang hari dagangan. Ia mendapati bahawa seluruh kelebihan VWAP berbanding TWAP ialah kualiti ramalan: selepas dikondisikan pada ralat lengkung volum direalisasikan, VWAP mengatasi TWAP kira-kira 4 mata asas dalam tercil hari dengan ramalan terbaik, manakala jurang itu hilang menjadi hingar dalam tercil terburuk.
Keputusan itu membayangkan susulan yang khusus dan boleh dipalsukan. Jika VWAP hanya menang pada hari apabila lengkung kebetulan tepat, maka peramal yang membetulkan dirinya ketika hari berkembang sepatutnya menukar sebahagian hari tercil buruk menjadi hari baik. Atau ia tidak sepatutnya — dan versi artikel yang menarik ialah versi apabila ia tidak berjaya, kerana tercil buruk dalam kripto ialah hari lata dan hari berita, dan tepat pada hari-hari itulah dua jam pertama volum diperhatikan paling kurang bermaklumat tentang dua jam berikutnya.
Artikel ini melaksanakan pengemas kini intrahari, menjalankannya terhadap harness yang sama, dan melaporkan delta IS berbanding lengkung statik — bersama-sama taburan dan nombor kuartil akhir, bukan min sahaja.
Apa yang diuji

Lengkung statik ialah prior: vektor tetap bagi pecahan volum jangkaan setiap baldi, dianggarkan secara luar talian. Versi adaptif menganggapnya sebagai prior yang perlu dikemas kini. Selepas baldi berlalu dan anda telah melihat volum sebenar , anda mempunyai dua maklumat baharu yang dibuang oleh lengkung statik:
- Anggaran aras. Jika prior mengatakan baldi sepatutnya membawa pecahan daripada hari itu dan ia membawa unit, jumlah penuh hari yang tersirat ialah . Ini ialah isyarat hari berat / hari mati, dan tersedia sejak baldi pertama.
- Pembetulan bentuk. Jika bentuk sebenar baldi yang telah berlalu menyimpang secara sistematik daripada bentuk prior, baldi yang berbaki mungkin turut menyimpang — tetapi hanya jika ralat lengkung volum intrahari berkorelasi kendiri dalam hari tersebut, yang merupakan soalan empirikal dan bukannya andaian yang boleh dibuat secara percuma.
Pelaksanaan di bawah menggunakan (1) sepenuhnya dan (2) langsung tidak: ia menormalkan semula ekor prior yang belum disentuh kepada jumlah yang dikemas kini. Ini ialah versi konservatif dan eksperimen pertama yang betul, kerana jika kemas kini aras sahaja sudah menangkap kebanyakan delta yang tersedia, maka mekanisme bentuk ialah kerumitan yang tidak wajar.
import numpy as np
from typing import Optional
class AdaptiveVolumePredictor:
"""
Bayesian-style adaptive volume profile predictor.
Combines a prior (the offline day-of-week x time-of-day curve)
with volume observed so far today to produce an updated forecast
for the remaining buckets.
"""
def __init__(self, historical_profiles: np.ndarray):
"""
Args:
historical_profiles: shape (n_days, n_buckets), each row sums to 1.0.
Use the median-based, day-of-week-conditioned curve from the
TWAP/VWAP/POV article -- a pooled mean curve is misspecified
and will make the adaptive version look better than it is by
giving it a weaker baseline to beat.
"""
self.prior_profile = np.median(historical_profiles, axis=0)
self.prior_profile /= self.prior_profile.sum()
self.prior_iqr = np.subtract(*np.percentile(historical_profiles, [75, 25], axis=0))
self.n_buckets = len(self.prior_profile)
def predict(
self,
observed_volumes: np.ndarray,
current_bucket: int,
total_volume_estimate: Optional[float] = None,
) -> np.ndarray:
"""
Predict absolute volume for every bucket: realized values for elapsed
buckets, forecasts for the remainder.
Args:
observed_volumes: actual volumes in buckets 0..current_bucket-1
current_bucket: index of the current bucket (0-based)
total_volume_estimate: external ADV estimate (optional prior on level)
"""
profile = np.zeros(self.n_buckets)
if current_bucket == 0:
base = total_volume_estimate if total_volume_estimate else 1.0
return self.prior_profile * base
profile[:current_bucket] = observed_volumes[:current_bucket]
observed_total = observed_volumes[:current_bucket].sum()
expected_fraction_so_far = self.prior_profile[:current_bucket].sum()
if expected_fraction_so_far > 0.01:
implied_total = observed_total / expected_fraction_so_far
else:
implied_total = observed_total * self.n_buckets
if total_volume_estimate:
w_obs = expected_fraction_so_far
implied_total = w_obs * implied_total + (1 - w_obs) * total_volume_estimate
remaining_prior = self.prior_profile[current_bucket:]
remaining_sum = remaining_prior.sum()
if remaining_sum > 0:
remaining_volume = max(0.0, implied_total - observed_total)
profile[current_bucket:] = remaining_prior / remaining_sum * remaining_volume
return profile
Dua butiran dalam kod itu membawa inti eksperimen. Prior ialah lengkung median yang dikondisikan oleh hari minggu, bukan min terkumpul — untuk mengetahui mengapa hal itu penting dalam pasaran yang satu lata pembubaran boleh menjadi 15% daripada volum harian dalam sepuluh minit, lihat bahagian lengkung volum dalam artikel VWAP. Dan kemas kini aras dikecutkan ke arah anggaran ADV luaran dengan berat sama dengan pecahan prior yang telah berlalu, kerana dalam baldi pertama implied_total ialah satu pemerhatian dibahagi nombor yang hampir sifar. Pengemas kini yang tidak dikecutkan memberikan prestasi paling buruk tepat ketika ia masih mempunyai sebahagian besar hari untuk merosakkannya.
Harness

Sama dengan larian TWAP/VWAP/POV, maka nombornya boleh dibandingkan baris demi baris:
- Instrumen/data: perpetual BTCUSDT, replay L2 selama 90 hari (20 aras teratas, 100 ms) bersama tape dagangan. UTC sepanjang masa; cap masa funding ditandakan.
- Pesanan induk: 500, ufuk h, saiz 0.75% daripada ADV tertinggal 30 hari, sisi beli, harga keputusan = mid pada permulaan. Masa mula rawak yang sama seperti larian yang diterbitkan.
- Lengan: (A) VWAP pada lengkung statik yang dipasang semula setiap minggu — garis dasar diterbitkan; (B) VWAP pada prior yang sama dengan kemas kini intrahari; (C) TWAP sebagai lantai.
- Metrik: IS dalam mata asas harga keputusan, termasuk yuran, berbanding ketibaan — dilaporkan sebagai min, median, sisihan piawai, persentil ke-95 dan IS kuartil akhir setiap induk. Slippage VWAP dilog sebagai diagnostik sahaja, bukan papan skor; bahagian penanda aras artikel VWAP menunjukkan kes berfungsi apabila slippage VWAP dan IS ketibaan meletakkan dua algoritma dalam susunan bertentangan. Penguraian IS penuh, termasuk istilah kos peluang, mengikuti implementation shortfall dan TCA.
Keputusan
Adakah ia membantu di tempat yang diperlukan?
Min utama ialah nombor yang paling kurang menarik di sini. Keputusan yang diterbitkan menetapkan bahawa jurang VWAP–TWAP monoton dalam ralat lengkung volum sebenar, maka lengan adaptif mesti dinilai dengan cara yang sama: bahagikan 90 hari kepada tercil berdasarkan jarak antara ramalan statik dan volum baldi sebenar, kemudian laporkan delta IS adaptif-tolak-statik dalam setiap tercil.
Kedua-dua hasil boleh diterbitkan dan membawa maksud yang bertentangan:
- Delta tertumpu pada tercil baik. Pengemas kini sedang memperhalus hari yang memang sudah mudah. Kesan bersih pada taburan kos hanyalah kosmetik; ekor — iaitu bahagian yang benar-benar dibayar oleh induk berpandukan alpha dengan ufuk keras — tidak berubah. Ini bermakna pengemas kini intrahari bukan penyelesaian bagi pautan paling lemah, dan laluan pembetulan bentuk serta rentas aset ialah perkara yang perlu dilihat seterusnya.
- Delta tertumpu pada tercil buruk. Pengemas kini melakukan tugas yang dibinanya: menangkap hari lata dan berita apabila lengkung statik paling tersasar. Inilah hasil yang akan membenarkan penambahan keadaan ke dalam gelung pelaksanaan.
Keputusan negatif ialah hasil yang dijangka dan wajar dilaporkan dengan jelas. Mekanisme yang menyukarkan lengkung volum kripto — lata ialah pecah rejim, bukan peralihan aras — ialah tepat mekanisme yang menewaskan peramal kemas kini aras: apabila baldi yang berlalu memberitahu bahawa hari ini berat, bahagian berat mungkin sudah berakhir. Lihat hasil negatif yang jujur untuk mengetahui sebab blog ini menerbitkan hasil sedemikian.
Cerun buku: adakah ia menambah apa-apa?

Satu ciri dalam set ciri draf belum diliputi di tempat lain dalam blog ini: cerun buku, iaitu seberapa cepat kedalaman terkumpul bertambah apabila anda bergerak menjauhi touch. Fit merentasi aras teratas; besar bermaksud kedalaman tertumpu pada touch, manakala kecil bermaksud ia tersebar nipis di seluruh buku.
def book_slope(prices: np.ndarray, volumes: np.ndarray, mid: float) -> float:
"""Slope of cumulative depth vs. distance from mid. One side only."""
distances = np.abs(prices - mid)
return float(np.polyfit(distances, np.cumsum(volumes), 1)[0])
Satu-satunya versi dakwaan ini yang layak dibuat ialah versi yang diukur: adakah penambahan book_slope kepada set ciri sedia ada menggerakkan ramalan volum, atau IS yang terhasil, melebihi garis dasar AR/EWMA? Artikel pemodelan spread menetapkan standard — laporkan kemahiran di atas garis dasar remeh dengan ufuk dinyatakan, kerana siri ini didominasi persistensi dan R² utama kebanyakannya mengukur autokorelasi.
Perkara yang sengaja tidak diterbitkan semula oleh artikel ini

Semua perkara di bawah sudah ada di blog dengan lebih mendalam, dan menerangkannya semula di sini hanya akan menghasilkan versi kedua yang lebih lemah:
- Pengukuran kecairan. Penganggar Roll (dengan pembaikan punca bertanda dan perangkap unit harga berbanding pulangan) serta lambda Kyle: pemodelan spread dengan pembelajaran mesin. Lambda Kyle turut ditala pada
aggTradesBinance sebenar sebagai pekali impak kekal dalam Almgren-Chriss. Kos sweep walk-the-book: model slippage dan kos. - Ciri buku pesanan. Mid berwajaran (yang bukan microprice Stoikov — microprice itu diselaraskan martingale), ketidakseimbangan buku berbilang aras, OFI dan taksonomi penuh ciri LOB: DeepLOB dan pemodelan spread.
- Corak intrahari. Bentuk U ekuiti ialah model yang salah untuk pasaran tanpa penutupan; struktur sesi/funding/mingguan kripto yang menggantikannya, serta grid hari-minggu × masa-hari, ada dalam artikel VWAP. Pengekodan masa-hari berkitar ada dalam jadual ciri artikel spread.
- Peristiwa berjadual. Luput Deribit 08:00 UTC, makro AS pada 12:30/14:00 UTC, penyelesaian CME — jadikan semuanya pemboleh ubah dummy dan bukannya mencemarkan lengkung garis dasar; kalendar kripto konkrit ada dalam artikel VWAP. Pengemas kini adaptif di atas bukan pengendali peristiwa dan tidak patut diminta menjadi begitu.
- Model. Gradient boosting dengan CV walk-forward yang dipurging dan di-embargo (
TimeSeriesSplitbiasa bocor merentasi sasaran forward-window yang bertindih) ada dalam pemodelan spread; keluarga CNN-LSTM, tensor input 40 ciri/10 aras, LOBFrame dan perbincangan krisis replikasi ada dalam DeepLOB. Perhatikan khususnya bahawa paksi aras tidak boleh diruntuhkan sebelum lapisan berulang. - Keputusan pesanan anak. Pasif berbanding agresif ialah titik pulang modal yang dikira , bukan ambang spread berkod keras: taktik pelaksanaan pesanan anak. Sasaran kadar penyertaan adalah endogen — isian anda sendiri tercetak pada tape — dan pembetulannya ada dalam artikel VWAP.
- Pecahan venue. Penghalaan pesanan pintar dalam kripto, dengan scorecard TCA setiap venue dalam implementation shortfall.
- Kependaman produksi. Bahagian produksi DeepLOB; perhatikan bahawa artikel spread sudah melayakkan dakwaan masa inferens — LightGBM 2000 pusingan meramal dalam puluhan mikro saat dari Python, dan hanya menjadi satu digit dengan predictor yang dikompil.
Dinamik adversarial layak mendapat satu perenggan, bukan satu seksyen. Kedalaman yang dipaparkan sebahagiannya bersifat persembahan, dan mekanisme pengesanan — kadar batal, kelajuan pembinaan dinding, tingkah laku ketika harga menghampiri, layering — diliputi dengan kaedah berasaskan PIQ yang konkrit dalam analisis kedudukan baris gilir dan dinding. Satu-satunya delta yang boleh ditambah oleh artikel ini ialah menganggapnya sebagai input peramal: nisbah batal-ke-dagang, purata masa rehat pada touch, dan pecahan kedalaman yang dibatalkan dalam 100 ms selepas muncul, dimasukkan ke dalam model volum bersama isyarat baldi yang telah berlalu. Sama ada ciri ini menambah kemahiran berbanding set ciri sedia ada ialah ukuran terbuka, bukan dakwaan.
Kesimpulan

Dakwaan yang diuji adalah sempit dan blog sudah menetapkan syarat untuk memalsukannya: artikel VWAP menetapkan bahawa kelebihan VWAP sepenuhnya ialah kualiti ramalan dan ramalan gagal pada hari yang kosnya paling tinggi. Pengemas kini intrahari sama ada membaikinya atau tidak, dan jawapannya ialah satu nombor dalam tercil buruk replay 500 induk.
Apa yang tidak akan dilakukan oleh artikel ini ialah melampirkan angka mata asas pada sistem produksi tanpa replay di belakangnya. Dakwaan seperti "ramalan kecairan yang ditala dengan baik menjimatkan 2–5 mata asas, perbezaan antara Sharpe 1.5 dan 2.0" ialah genre yang Sharpe terdeflasi dan multiple testing wujud untuk merungkai: tanpa sumber, tidak dikondisikan dan tidak pernah disertai taburan. Nombor yang penting di sini ialah IS kuartil akhir pada tercil hari terburuk, dan ia sama ada telah diukur atau tidak patut dilaporkan.
Pengarang
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.