← Макалаларга кайтуу
August 13, 2026
5 мүн окуу

Updating the Volume Curve Intraday: Does Adaptive Forecasting Actually Help?

Updating the Volume Curve Intraday: Does Adaptive Forecasting Actually Help?
#microstructure
#liquidity
#execution
#prediction
#order-book

TWAP, VWAP жана POV макаласында BTCUSDT боюнча 90 күндүк L2 реплейде үч график түзүүчүнү бетме-бет салыштырып, атайын ачык жара катары калтырган жыйынтыкка келгенбиз: криптодо көлөм ийри сызыгы бөлүштүрүүнүн эмес, бүт түтүктүн эң алсыз звеносу. Ал жерде жөнөкөй версия атайын колдонулган — медианага негизделген, жуманын күнү × күндүн убактысы боюнча ийри сызык, жума сайын кайра эсептелип, соода күнү бою өзгөрбөйт. Натыйжада VWAPтын TWAP үстүндөгү бардык артыкчылыгы болжолдоо сапатына байланыштуу экени көрүндү: ишке ашкан көлөм ийри сызыгынын катасы эске алынганда, VWAP эң жакшы болжолдонгон күндөрдүн терцилинде TWAPты болжол менен 4 bpsке утат, ал эми эң начар терцилде айырма ызы-чууга чейин жоголот.

Бул жыйынтык конкреттүү, бурмалануучу байкоону билдирет. Эгерде VWAP ийри сызык туура келген күндөрдө гана утса, анда күн өткөн сайын өзүн оңдогон синоптик кээ бир жаман-терцилдик күндөрдү жакшы күндөргө айландырышы керек. Же андай болбошу керек - жана бул макаланын кызыктуу версиясы андай эмес, анткени криптодогу жаман терциле каскаддык күндөр жана жаңылык күндөрү, жана дал ошол күндөр байкалган көлөмдүн алгачкы эки сааты кийинки эки жөнүндө эң аз маалыматтуу.

Бул макала бир күндүк жаңырткычты ишке ашырат, аны окшош жабдыктарга каршы иштетет жана IS дельтасынын статикалык ийри сызыгына каршы отчет берет — бөлүштүрүү жана акыркы квартиль саны менен, орточо гана эмес.

Эмне текшерилип жатат

Байкалган соода активдүүлүгүнүн негизинде адаптивдүү көлөм ийри сызыгынын априорун жаңыртуу

Статикалык ийри сызык — офлайн бааланган, ар бир челектеги күтүлгөн көлөм үлүштөрүнүн туруктуу u={u1,,uB}u = \{u_1, \ldots, u_B\} вектору. Адаптивдүү версия аны жаңыртыла турган априор катары карайт. cc челек өткөндөн кийин жана чыныгы көлөмдөрдү V1,,VcV_1, \ldots, V_c байкаганда, статикалык ийри сызык таштап кеткен эки жаңы маалымат пайда болот:

  1. Деңгээлдин баасы. Эгер априор боюнча 1..c1..c челектери күндүн icui\sum_{i \le c} u_i үлүшүн камтышы керек болуп, иш жүзүндө icVi\sum_{i\le c} V_i бирдик көлөм өткөн болсо, толук күндүн болжолдуу суммасы V^=icVi/icui\hat{V} = \sum_{i \le c} V_i \big/ \sum_{i \le c} u_i болот. Бул бүгүн оор күнбү же соолгундаган күнбү деген сигнал жана ал биринчи челектен эле жеткиликтүү.
  2. Форманы оңдоо. Өтүп кеткен челектердин иш жүзүндөгү формасы априор формасынан системалуу айырмаланса, калган челектер да айырмаланышы мүмкүн — бирок күн ичиндеги көлөм ийри сызыгынын каталары ошол күндүн ичинде автокорреляцияланганда гана. Бул эркин кабыл ала турган божомол эмес, эмпирикалык суроо.

Төмөнкү ишке ашырууда (1) толук жана (2) такыр колдонулбайт: ал тийбеген мурунку куйрукту жаңыртылган жалпыга кайра нормалдаштырат. Бул консервативдик версия жана бул эң туура биринчи эксперимент, анткени таза деңгээлдеги жаңыртуу буга чейин колдо болгон дельтанын көбүн камтып алса, анда форманын механизми негизсиз татаалдык болуп саналат.

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

Бул коддогу эки деталь эксперимент үчүн маанилүү. Априор — жуманын күнүнө шартталган медианалык ийри сызык, бириктирилген орточо эмес. Бир ликвидация каскады он мүнөттө күндүк көлөмдүн 15%ын түзө алган рынокто мунун мааниси үчүн VWAP макаласынын көлөм ийри сызыгы бөлүмүн караңыз. Деңгээл жаңыртуусу сырткы ADV баасына карай кысылат, анын салмагы өтүп кеткен априор үлүшүнө барабар, анткени биринчи челекте implied_total нөлгө жакын санга бөлүнгөн бир гана байкоо болот. Кысылбаган жаңырткыч күндү бузууга эң көп убакыт калган учурда эң начар иштейт.

Тесттик жабдык

Адаптивдүү болжолдоо изилдөө тутумундагы параллелдүү аткаруу жолдору

TWAP/VWAP/POV менен окшош чуркап, сандар сызык үчүн салыштырылат:

  • Инструмент/маалымат: BTCUSDT түбөлүктүү, 90 күн L2 кайталоо (эң жогорку 20 деңгээл, 100 мс) плюс соода лентасы. UTC бою; каржылоо убакыт белгилери белгиленген.
  • Ата-эне буйруктары: 500, горизонтT=4T = 4ч, көлөмү 0,75% арткы 30 күндүк ADV, сатып алуу жагы, чечим баасы = башында орто. Жарыяланган чуркоо сыяктуу эле туш келди баштоо убакыттары.
  • Куралдар: (A) VWAP статикалык жумалык оңдоо ийри сызыгында — жарыяланган базалык көрсөткүч; (B) күн ичинде жаңыртуу менен ошол эле убакта VWAP; (C) TWAP пол катары.
  • Метрика: Чечим баасынын bps менен IS, төлөмдөр камтылган, келүү менен салыштырганда — орточо, медиана, стандарттык четтөө, 95-процентиль жана ар бир ата-эненин акыркы квартилинин IS катары билдирилди. VWAP тайгалануусу диагностика катары гана жазылат, эч качан табло катары; VWAP макаласынын эталондук бөлүмү VWAP тайып кетүү жана келүү IS эки алгоритмди карама-каршы тартипте жайгаштырган иштеген ишти көрсөтөт. Мүмкүнчүлүк-чыгым мөөнөтүн камтыган ИСтин толук бөлүнүшү ишке ашыруунун жетишсиздиги жана TCA.

Жыйынтыктар

Керектүү жерде жардам береби?

Бул жердеги баш сөздүн мааниси эң аз кызыктыруучу сан. Жарыяланган жыйынтык VWAP-TWAP ажырымы аткарылган көлөмдүн ийри катасында монотондуу экенин көрсөттү, андыктан адаптациялоочу колду дал ушундай баалоо керек: 90 күндү терцилдерге бөлүү керек.L1L_1статикалык божомол менен ишке ашкан чака көлөмдөрүнүн ортосундагы аралыкты, андан кийин ар бир терцилдин ичиндеги адаптивдик-минус-статикалык IS дельтасын кабарлаңыз.

Эки жыйынтык тең жарыяланып турат жана алар карама-каршы нерселерди билдирет:

  • Дельта жакшы терциледе топтолгон. Жаңырткыч мурунтан эле оңой болгон күндөрдү тактоодо. Чыгымдарды бөлүштүрүү боюнча таза таасир косметикалык болуп саналат; куйрук - бул катуу горизонтто альфа башкарган ата-эне чындыгында төлөйт - өзгөрүүсүз. Бул бир күндүк жаңырткыч эң алсыз шилтемени оңдоо эмес жана форманы оңдоо жана кайчылаш активдердин маршруттары кийинки жерде издеш керек деп айтууга болот.
  • Дельта начар терчилде топтолгон. Жаңырткыч ал үчүн курулган жумушту аткарып жатат: статикалык ийри сызык эң туура эмес болгон каскадды жана жаңылык күндөрүн кармайт. Бул аткаруу циклинде кошумча абалды актай турган жыйынтык.

Терс жыйынтык күтүлгөн жана аны ачык отчет кылууга арзыйт. Криптодогу көлөм ийри сызыгын татаал кылган механизм — каскад деңгээлдин жылышы эмес, режимдин үзүлүшү — деңгээлди жаңыртуучу болжолдоочуну дал ошол механизм жеңет: өтүп кеткен челектер бүгүн оор күн экенин билдиргенде, оор бөлүгү бүтүп калган болушу мүмкүн. Бул блог эмне үчүн мындай жыйынтыктарды жарыялай турганын чынчыл терс жыйынтыктан көрүңүз.

Китептин ылдыйышы: ал бир нерсе кошобу?

Абстракттуу лимиттик буйрук китебинин тереңдик пейзажы жана ликвиддүүлүк ылдыйышы

Долбоордогу функциялар топтомундагы бир өзгөчөлүк бул блогдун башка жеринде камтылган эмес: китептин эңкейиши, тийүүдөн алыстаган сайын топтолгон тереңдик канчалык тез чогулат. FitCumVol(d)=α+βd\text{CumVol}(d) = \alpha + \beta dүстүнөнKKдеңгээл; чоңβ\betaтереңдик тийгенде топтолгон дегенди билдирет, кичинекейβ\betaал китеп боюнча жука таралган дегенди билдирет.

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])

Бул дооматтын жасоого арзый турган жалгыз түрү — өлчөнгөн түрү: учурдагы өзгөчөлүктөргө book_slope кошуу көлөм болжолун же алынган ISти AR/EWMA базалык чегинен ашык өзгөртөбү? Спредди моделдөө жөнүндөгү макала стандартты белгилейт — горизонтту көрсөтүп, жөнөкөй базалыктан жогору болгон жөндөмдү отчет кылыңыз, анткени бул катарларда туруктуулук үстөмдүк кылат жана башкы R² көбүнчө автокорреляцияны өлчөйт.

Бул макала атайын эмнени кайра чыгарбайт

Чектелген сандык түтүктүн ичиндеги багытталган изилдөө модулу

Төмөндө бардыгы блогдо тереңирээк бар жана аны бул жерде кайра түшүндүрүү алсызыраак экинчи версияны гана жаратат:

  • Ликвиддүүлүктү өлчөө. Roll's баалоочу (кол коюлган түп-тамыр жана баа бирдиктери-кайтаруу тузагы менен) жана Кайлдын ламбдасы: машинаны үйрөнүү менен моделдештирүү. Кайлдын ламбдасы ошондой эле реалдуу Binance aggTradesде Алмгрен-Крисс туруктуу таасир коэффициенти катары калибрленген. Китепти тазалоо баасы: жылуу жана чыгым моделдери.
  • Китептин өзгөчөлүктөрүнө буйрутма берүү. Салмактуу орточо баа (бул Стойковдун микробаасы * эмес* — бул мартингалга ылайыкталган), көп деңгээлдеги китеп дисбаланс, OFI жана толук LOB өзгөчөлүк таксономиясы: DeepLOB жана жайлуу моделдөө.
  • Бир күндүк үлгүлөр. Акциянын U-формасы жакындыгы жок рынок үчүн туура эмес модель; аны алмаштырган крипто сессиясы/каржылоо/жумалык структурасы, плюс жуманын күнү × сутканын убактысы торчосу VWAP макаласында. Күндүн циклдик убактысын коддоо жайылган макалада өзгөчөлүктөр таблицасы.
  • Раграммадагы окуялар. Deribit 08:00 UTC мөөнөтү бүтөт, АКШ макросу 12:30/14:00 UTC, CME эсептешүүлөрү — аларга базалык ийри сызыкты булгабастан, аларды муляждар катары караңыз; конкреттүү крипто календары VWAP макаласында. Жогорудагы адаптивдик жаңырткыч окуяларды иштеткич эмес жана анын болушун талап кылбаш керек.
  • Моделдер. Тазаланган, эмбарго коюлган алдыга резюме менен градиентти жогорулатуу (жөнөкөйTimeSeriesSplitкабатталган алдыга терезе бутасы боюнча агып кетүү) жайлуу моделде; CNN-LSTM үй-бүлөсү, 40-функция/10-деңгээлдеги киргизүү тензору, LOBFrame жана репликация-кризис талкуусу DeepLOB. Айрыкча, деңгээл огу кайталануучу катмардан мурун жыйылганга болбойт.
  • Баланын буйругу боюнча чечим. Агрессивдүү менен пассивдүү - бул эсептелген зыянсыздыкp=δ/(Π+δ)p^* = \delta/(\Pi + \delta), катуу коддолгон жайылтуу босогосу эмес: балдардын буйругун аткаруу тактикасы. Катышуу курсунун максаттуулугу эндогендик болуп саналат — өзүңүздүн толтурууларыңызды лентага басып чыгарасыз — жана оңдоо VWAP макаласында.
  • Өтүүчү жердин бөлүнүшү. Криптодо акылдуу буйрутма багыттоо, ишке ашыруунун жетишсиздиги ичинде ар бир орун үчүн TCA көрсөткүчтөр картасы менен.
  • Өндүрүш кечигүү. DeepLOB'тун өндүрүш бөлүмү; жайылып кеткен макала мурунтан эле тыянак-убакыт талаптарын квалификациялай тургандыгын белгилеңиз - 2000-раунддук LightGBM Python'дон ондогон микросекундтарда болжолдойт, компиляцияланган болжолдоочу менен бир орундуу.

Каршылык динамикасы бөлүмгө эмес, бир абзацка татыктуу. Көрсөтүлгөн тереңдиктин бир бөлүгү жасалма, ал эми аныктоо механикасы — жокко чыгаруу үлүшү, дубалдын топтолуу ылдамдыгы, баа жакындаганда жүрүм-турум жана катмарлоо — кезектин позициясы жана китеп дубалын талдоо материалында берилген. Бул макала кошо ала турган жалгыз айырма — аларды болжолдоочунун киргизүүлөрү катары кароо: жокко чыгаруу/соода катышы, touch чекитиндеги орточо күтүп туруу убактысы жана пайда болгондон кийинки 100 мс ичинде жокко чыгарылган тереңдик үлүшү, өтүп кеткен челек сигналы менен кошо көлөм моделине берилет. Алар учурдагы өзгөчөлүктөрдөн жогору жөндөм кошобу — бул ачык өлчөө, доомат эмес.

Корутунду

Белгисиздиктен өлчөнгөн аткаруу жыйынтыгына алып барган далил жолу

Текшерилип жаткан доомат тар жана аны жокко чыгаруу шарттары блогдо буга чейин түзүлгөн: VWAP макаласы VWAPтын артыкчылыгы толугу менен болжолдоо сапатына байланыштуу экенин жана болжолдоо эң кымбат күндөрдө иштебей каларын көрсөткөн. Күн ичиндеги жаңырткыч муну оңдойт же оңдобойт; жооп 500 негизги буйрук боюнча реплейдин начар терцилиндеги бир сан болот.

Бул макалада эмне кылбайт, bps фигурасын өндүрүш тутумуна анын артында кайталоосуз тиркөө. "Жакшы конфигурацияланган ликвиддүүлүктү болжолдоо 2–5 бит/с үнөмдөйт, Шарптын 1,5 жана 2,0 айырмасы" түрүндөгү талаптар так Шарпты өчүргөн жана бир нече тестирлөө жок кылуу үчүн бар: булаксыз, шартсыз жана эч качан дисперсия менен коштолбогон. Бул жерде маанилүү сан - бул күндөрдүн эң начар терцилиндеги акыркы квартиль IS жана ал өлчөнөт, же кабарланбайт.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Рынктан бир кадам алдыда болуңуз

AI соода аналитикасы, рынок талдоолору жана платформа жаңылыктары үчүн биздин жаңылыктар бюллетенине жазылыңыз.

Биз сиздин купуялыгыңызды урматтайбыз. Каалаган убакта жазылымдан чыга аласыз.