← Мақалаларға оралу
July 14, 2026
5 мин оқу

Almgren-Chriss моделі түсінікті тілмен: бір түскі уақытта іске асыруға болатын оңтайлы орындау

Almgren-Chriss моделі түсінікті тілмен: бір түскі уақытта іске асыруға болатын оңтайлы орындау
#орындау
#almgren-chriss
#нарықтық әсер
#оңтайлы орындау
#twap
#quant
#python
#crypto

Almgren мен Chriss (2001), "Optimal execution of portfolio transactions" (Journal of Risk 3(2), 5–39) — орындауды зерттеу саласындағы ең көп сілтеме жасалатын мақала әрі дұрыс іске асырылуы ең сирек кездесетін мақалалардың бірі. Интернеттегі "Almgren-Chriss" кодтарының басым бөлігі — түсіндірме блогы бар қарапайым TWAP жоспарлаушысы ғана. Бұл тақырыпқа арналған блог жазбаларының көбі шығарылымды айналып өтіп, sinh функциясын жайдан-жай айтып қана қояды, ал өндірісте нақты маңызы бар нәрсеге — параметрлер қайдан алынатынына — мүлде тоқталмайды.

Бұл мақала бәрін толық қамтиды: адал түрде тұжырымдалған модель болжамдары; болжам ретінде емес, шығарылған түрдегі жабық түрдегі траектория; тиімді шекара және тәуекелге жанашырлық параметрін таңдау тәсілі; сондай-ақ уақытша әсер η\eta, тұрақты әсер γ\gamma және құбылмалылық σ\sigma — үш кірмелі шаманы Binance ордер кітабы мен сауда деректерінен калибрлеу, жұмыс істейтін Python коды және неге сәйкестеу нәтижесі шулы болатыны туралы адал талқылаумен қоса. Бұл — орындау саласындағы бүкіл ілімнің интеллектуалдық өзегі: TWAP, VWAP және POV — осы модельдің дербес жағдайлары немесе эвристикалық туыстары ғана (TWAP, VWAP, POV: барлығы қолданатын орындау алгоритмдері мақаласын қараңыз), ал заманауи ML тәсілдері — күшейтілген оқыту жоспарлаушылары мен нейрондық әсер модельдері — дәл біз төменде жазатын болжамдарды жеңілдетуге деген талпыныстар.

Бастапқы қойылым: модель нақты нені болжайды

Сізде XX бірлік актив бар делік (мысалы, 100 BTC) және оны TT уақытына дейін толық сатып бітіру керек. [0,T][0, T] аралығын ұзындығы τ=T/N\tau = T/N болатын NN интервалға бөліңіз. Шешім қабылданатын айнымалы — активтегі қалдық траекториясы x0=X,x1,,xN=0x_0 = X, x_1, \dots, x_N = 0, ал kk интервалында орындалатын сауда мөлшері nk=xk1xkn_k = x_{k-1} - x_k.

Модельдің тұтас негізін үш болжам көтеріп тұр:

1. Арифметикалық кездейсоқ жүріс. Сыртқы әсерсіз баға мына түрде өзгереді:

Sk=Sk1+στξkτg ⁣(nkτ),S_k = S_{k-1} + \sigma \sqrt{\tau}\, \xi_k - \tau\, g\!\left(\frac{n_k}{\tau}\right),

мұндағы ξk\xi_k — тәуелсіз бірдей үлестірілген стандартты қалыпты кездейсоқ шамалар, ал σ\sigmaабсолютті құбылмалылық (доллар/уақыт бірлігінің1/2^{1/2}, пайызбен емес). Геометриялық емес, дәл арифметикалық жүріс алынды — бірнеше сағат ішінде айырмашылық елеусіз, ал арифметикалық жүріс алгебраны сызықтық-квадраттық күйде сақтайды. Тренд жоқ: Almgren мен Chriss тренд мүшесін талқылайды, бірақ күн ішіндегі ликвидация үшін 4 сағаттық альфа бағаңыз әдетте тек шу болып шығады, сондықтан оны нөлге теңеу — адал әдепкі таңдау.

2. Сызықтық тұрақты әсер. g(v)=γvg(v) = \gamma v: vv қарқынымен сауда жасау бағаны тұрақты түрде, пропорционалды түрде ығыстырады және бұл ығысу ешқашан жойылмайды. Сатқан әрбір бірлік мид-бағаны мәңгілікке γ\gamma шамасына төмендетеді. Бұл қарабайыр көрінгенімен, оны сызықтық күйінде қалдырудың терең себебі бар: Huberman мен Stanzl (2004) сауда мөлшеріне қатысты сызықтық емес тұрақты әсердің оң күтілетін пайдасы бар айналымдық стратегияларға — яғни бағаны манипуляциялауға — жол беретінін дәлелдеген. Сызықтық тұрақты әсер — бұл ыңғайлылық үшін қабылданған жеңілдету емес, бұл осы кластағы модельдердегі арбитражсыз жалғыз таңдау.

3. Сызықтық уақытша әсер. kk интервалында нақты алатын баға:

S~k=Sk1h ⁣(nkτ),h(v)=ϵsgn(v)+ηv.\tilde{S}_k = S_{k-1} - h\!\left(\frac{n_k}{\tau}\right), \qquad h(v) = \epsilon\, \mathrm{sgn}(v) + \eta v.

ϵ\epsilon — сатып алу-сату спрэдінің жартысы мен комиссияларды қамтиды; η\etavv қарқынымен ликвидтілік талап етудің шекті құнының көлбеуі. Уақытша әсер тек сіздің өз орындалуыңызға әсер етеді және лезде жоғалады — кітап сіздің келесі дербес ордеріңізге дейін толық қалпына келеді. "Сызықтық", "лезде" және "толық" деген үш сөздің әрқайсысы нақты нарықтарда дұрыс емес, соңғы бөлім дәл осы қаншалықты дұрыс еместікке арналған. Бірақ алдымен — осыларды қабылдағаннан алатын пайда.

Траекторияның шығыны мен дисперсиясы

Орындалуларды қосып, бастапқы белгіден XS0X S_0 азайтсаңыз, орындау шығынын (implementation shortfall) аласыз. Оның ξk\xi_k шуы бойынша күтілетін мәні мен дисперсиясы:

E[C]=12γX2тұрақты+ϵXспрэд+η~τk=1Nnk2уақытша,V[C]=σ2τk=1Nxk2,E[C] = \underbrace{\tfrac{1}{2}\gamma X^2}_{\text{тұрақты}} + \underbrace{\epsilon X}_{\text{спрэд}} + \underbrace{\frac{\tilde{\eta}}{\tau} \sum_{k=1}^{N} n_k^2}_{\text{уақытша}}, \qquad V[C] = \sigma^2 \tau \sum_{k=1}^{N} x_k^2,

мұндағы η~=η12γτ\tilde{\eta} = \eta - \tfrac{1}{2}\gamma\tauτ0\tau \to 0 кезінде жойылатын дискреттеу түзетуі.

Көптеген іске асырулар байқамайтын екі бақылау:

  • Тұрақты шығын 12γX2\tfrac{1}{2}\gamma X^2 траекторияға тәуелді емес. Сызықтық, ыдырамайтын тұрақты әсер болған жағдайда, сіз қалай жоспарласаңыз да бірдей тұрақты алымды төлейсіз. Оңтайландыру толықтай уақытша шығын мүшесі (баяу, біркелкі саудаға ұмтылады — минимумы nk=X/Nn_k = X/N, яғни TWAP) мен дисперсия мүшесінің (активіңізді дереу тарату) арасындағы күреске тіреледі.
  • Дисперсия мүшесі сауда бойынша емес, қалдық бойынша салмақталған. Тәуекел сіз сатқан нәрсеге емес, әлі иеленіп отырған xkx_k шамасына жиналады. Дәл осы себепті шұғылдық кестені басынан тығыздайды.

Жабық түрдегі шешім: sinh, cosh және шұғылдық параметрі

Almgren-Chriss орта-дисперсия мақсат функциясын минимумдайды:

U(x)=E[C]+λV[C],U(x) = E[C] + \lambda V[C],

мұндағы λ0\lambda \geq 0 — доллардың кері бірлігіндегі тәуекелге жанашырлық. Ішкі нүктелер үшін U/xj=0\partial U / \partial x_j = 0 теңдейік. Уақытша мүше xx-тің екінші айырымдарын, ал дисперсия мүшесі xjx_j-тің өзін береді, нәтижесінде екінші ретті сызықтық айырымдық теңдеу шығады:

xj12xj+xj+1τ2=κ~2xj,κ~2=λσ2η~.\frac{x_{j-1} - 2x_j + x_{j+1}}{\tau^2} = \tilde{\kappa}^2 x_j, \qquad \tilde{\kappa}^2 = \frac{\lambda \sigma^2}{\tilde{\eta}}.

Бұл — x=κ2xx'' = \kappa^2 x теңдеуінің дискретті аналогы, және x0=Xx_0 = X, xN=0x_N = 0 шекаралық шарттарымен шешім гиперболалық түрде болады:

  xj=Xsinh ⁣(κ(Ttj))sinh(κT)  nj=2sinh(κτ/2)sinh(κT)cosh ⁣(κ(Ttj1/2))X,\boxed{\;x_j = X\, \frac{\sinh\!\big(\kappa\,(T - t_j)\big)}{\sinh(\kappa T)}\;} \qquad n_j = \frac{2\sinh(\kappa\tau/2)}{\sinh(\kappa T)}\, \cosh\!\big(\kappa (T - t_{j-1/2})\big)\, X,

мұндағы κ\kappa 2τ2(cosh(κτ)1)=κ~2\tfrac{2}{\tau^2}\left(\cosh(\kappa\tau) - 1\right) = \tilde{\kappa}^2 теңдеуін қанағаттандырады, ал шағын τ\tau үшін бұл жай ғана κκ~=λσ2/η\kappa \approx \tilde{\kappa} = \sqrt{\lambda\sigma^2/\eta}.

Әртүрлі kappa мәндері үшін оңтайлы қалдық траекториялары, TWAP-тың түзу сызығынан бастап агрессивті алдын-ала жүктелген қисықтарға дейін

Стратегия туралы барлық ақпарат бір санда шоғырланған:

κ=λσ2η[өлшем бірлігі: 1/уақыт].\kappa = \sqrt{\frac{\lambda \sigma^2}{\eta}} \qquad [\text{өлшем бірлігі: } 1/\text{уақыт}].

κ\kappaшұғылдық. Оның кері мәні θ=1/κ\theta = 1/\kappa — мәміленің сипаттамалық уақыты: әсер шығынын үнемдеу үшін активті ұстап тұрудың тәуекеліне бару тиімді болатын уақыт масштабы. κ\kappa нені тәуелсіз екеніне назар аударыңыз: ол ордер көлемі XX-ке және мерзім TT-ге тәуелді емес. Мәміленіңіздің ішкі уақыт масштабы 20 минут па, әлде 6 сағат па — бұл тек тәуекелге жанашырлыққа, құбылмалылыққа және ликвидтілікке байланысты анықталады. Егер θT\theta \ll T болса, мерзіміңіз маңызды емес — модель өз кестесі бойынша ликвидация жасайды және горизонттың қалған бөлігі пайдаланылмайды. Егер θT\theta \gg T болса, мерзім шектеуші фактор болады және сіз іс жүзінде TWAP жасайсыз.

Тәуекелге бейтарап шектік жағдай — бұл TWAP: TWAP осылай пайда болды

λ0\lambda \to 0 алайық, сонда κ0\kappa \to 0. Онда sinh(z)z\sinh(z) \to z және

x(t)=Xsinh(κ(Tt))sinh(κT)    XTtT.x(t) = X\,\frac{\sinh(\kappa(T-t))}{\sinh(\kappa T)} \;\longrightarrow\; X\,\frac{T-t}{T}.

Оңтайлы траектория түзу сызыққа айналады: тең уақыт аралықтарында тең көлемдер. TWAP кездейсоқ жұмыс істейтін эвристика емес — ол сызықтық әсері бар тәуекелге бейтарап трейдер үшін Almgren-Chriss моделінің дәл оңтайлы шешімі. Кез келген адам TWAP жасаған сайын ол жасырын түрде λ=0\lambda = 0 деп мәлімдейді: "Менің шығынымның дисперсиясы емес, тек орташа мәні маңызды". Бұл шағын ордерлер мен қысқа горизонттар үшін негізделген позиция. Бірақ күнделікті құбылмалылығы 4% болатын активте 8 сағат ішінде күндік көлемнің 5%-ын ликвидациялау кезінде бұл — таңқаларлық позиция, дегенмен адамдар оны дәл осындай жағдайда қолданады. Қарама-қарсы шектік жағдай λ\lambda \to \infty барлық j>0j > 0 үшін xj0x_j \to 0 береді: бәрін бірінші интервалда лақтырып жіберу, қанша тұрса да төлеу. Осы екі шеттің арасында κT\kappa T интерполяциялайды: κT0.5\kappa T \lesssim 0.5 TWAP-тан әрең ажыратылады, κT3\kappa T \gtrsim 3 агрессивті түрде алдын-ала жүктелген.

Орындаудың тиімді шекарасы

Әрбір λ\lambda үшін бір траектория, бір күтілетін шығын E(λ)E(\lambda) және бір дисперсия V(λ)V(\lambda) аласыз. λ[0,)\lambda \in [0, \infty) бойынша сүзу (V,E)(V, E) жазықтығында қисық сызады — Markowitz моделіне тікелей аналогиямен, орындаудың тиімді шекарасы. Ол дөңес әрі кемиді: дисперсияның азаюы әрқашан күтілетін шығынның артуымен төленеді, әрі қайтарым тез азаяды. Берілген λ\lambda таңдаған шекара нүктесінде тәуекелге жанашырлық жанама сызықтың (теріс) көлбеуіне тең: λ=E/V\lambda = -\partial E / \partial V.

Тиімді шекара: орындау шығыны мен дисперсияның қатынасы, лямбданы көлбеу ретінде көрсететін жанама сызықпен

Шекара "λ\lambda дегеніміз не?" деген сұрақты (оған ешкім интроспективті түрде жауап бере алмайды) "мен қандай шығын/тәуекел қатынасын қалаймын?" деген сұраққа айналдырады — ал бұған кез келген дилинг-бөлме нақты жауап бере алады. Нүктені таңдаудың үш практикалық жолы:

  1. Шекті шығын пайымдауы. Шекара бойымен жүріп, сұраңыз: "осы нүктеден келесіге жылжу үшін мен шығын стандартты ауытқуының Δstd\Delta\text{std} долларын жою үшін ΔE\Delta E доллар күтілетін шығын төлеймін — бұл мәмілеге барам ба?" Шекараның "тізе" нүктесі әдетте екі есе дәлдікпен айқын көрінеді, әрі осы дәлдікте траектория λ\lambda-ға сезімтал емес.
  2. Тәуекел бюджеті. Максималды рұқсат етілген шығын стандартты ауытқуын бекітіңіз (мысалы, "қалдық позицияның бір күндік 1-сигмасы номиналдың 15 базистік пунктінен аспауы керек") және осы шартты қанағаттандыратын ең арзан траекторияны алыңыз. Бұл — Лагранж көбейткіші λ\lambda болатын шектелген есеп.
  3. Сипаттамалық уақытты мақсаттау. θ=1/κ\theta = 1/\kappa шамасын тікелей таңдаңыз ("бұл ордердің жартылай өмірі 90 минут болуы керек") және λ=η/(σ2θ2)\lambda = \eta/(\sigma^2\theta^2) шамасын кері есептеңіз. Практиктердің көбі "шұғылдық" сырғытпасын орнатқанда жасырын түрде дәл осыны жасайды.

Калибрлеу бөлімінде негіздейтін сандармен жасалған мысал. S_0 = \100{,}000бағаменбағаменX = 100BTCсатыңыз,горизонтBTC сатыңыз, горизонтT = 4сағ,сағ,\sigma = $600BTCкеBTC-ке\sqrt{\text{сағ}}қа(шамамен3-қа (шамамен 3% күндік құбылмалылық), \eta = 1.0\ $\cdot\text{сағ}/\text{BTC},, \lambda = 10^{-6}\ $^{-1}$. Онда

κ=106×3.6×1051.0=0.6 сағ1,κT=2.4,θ1.7 сағ.\kappa = \sqrt{\frac{10^{-6} \times 3.6\times 10^{5}}{1.0}} = 0.6\ \text{сағ}^{-1}, \qquad \kappa T = 2.4, \qquad \theta \approx 1.7\ \text{сағ}.

Оңтайлы кесте бірінші сағатта 46.2 BTC сатады (TWAP: 25). Уақытша шығын: \eta \int_0^T v(t)^2 dt \approx \3{,}290,TWAPүшін, TWAP үшін $2{,}500геқарсы.Шығынстандарттыауытқуы:-ге қарсы. Шығын стандартты ауытқуы: $53{,}000,TWAPүшін, TWAP үшін $69{,}300геқарсы.Демек,-ге қарсы. Демек, 10 млн номиналдың қосымша 0.8 базистік пункт күтілетін шығыны үшін шығын тәуекелін 23%-ға қысқартасыз. Модельдің бүкіл мазмұны бір сөйлемде: ол сақтандыруды бағалайды және оны сатып алу-алмауды сізге қалдырады.

Траекторияның өзі — небәрі он жол Python коды:

import numpy as np

def almgren_chriss(X, T, N, sigma, eta, gamma, lam):
    """Optimal liquidation trajectory (discrete AC 2001)."""
    tau = T / N
    eta_t = eta - 0.5 * gamma * tau          # tilde-eta
    kappa_t2 = lam * sigma**2 / eta_t        # tilde-kappa^2
    kappa = np.arccosh(0.5 * kappa_t2 * tau**2 + 1) / tau
    t = np.arange(N + 1) * tau
    x = X * np.sinh(kappa * (T - t)) / np.sinh(kappa * T)
    n = x[:-1] - x[1:]                       # child order sizes
    E = 0.5 * gamma * X**2 + (eta_t / tau) * np.sum(n**2)
    V = sigma**2 * tau * np.sum(x[1:]**2)
    return x, n, E, V

x, n, E, V = almgren_chriss(X=100, T=4, N=48, sigma=600,
                            eta=1.0, gamma=0.3, lam=1e-6)
print(f"first-hour qty: {n[:12].sum():.1f} BTC, "
      f"E=${E:,.0f}, std=${np.sqrt(V):,.0f}")

lam мәнін np.logspace(-8, -4, 50) бойынша сүзіп, EE мен V\sqrt{V} графигін салыңыз — бұл сіздің шекараңыз, әрі бүкіл шешім беті тәуекел комитетіне көрсетуге болатын бір графикке сияды.

Калибрлеу: Binance деректерінен η\eta, γ\gamma, σ\sigma

Іске асырулардың 90%-ы дәл осы жерде үнсіз құриды. Траектория формуласы қарапайым, ал параметрлер олай емес. Үш шама — үш түрлі бағалау есебі.

Binance деректерінен алынған қатысу қарқыны бойынша сырғанауды және таза ордер ағыны бойынша баға өзгерісін көрсететін калибрлеу нүктелік диаграммалары

σ\sigma: ең оңайы

Мид-баға қайтарымдары бойынша, түбір-сағатқа шаққандағы абсолютті құбылмалылық. 1 минуттық барларды пайдаланып масштабтаңыз; неғұрлым нәзік дискреттеу кезінде микроқұрылымдық шу (сатып алу-сату бағасының секіруі) іске асырылған дисперсияны жоғары қарай бұрмалайды. Бұл баға сенімді — құбылмалылық сіз дұрыс аласыз деген жалғыз параметр.

η\eta: кітап пен сауда деректерінен уақытша әсер

Екі толықтырушы жол бар. A жолы — L2 кітабын аралау. Тереңдік снапшоттарынан qq көлеміндегі гипотетикалық маркет-ордер сатылымының шығынын есептеңіз: тұтынылған деңгейлердің VWAP-і минус мид-баға. шығын(q)ϵ+ηинстq\text{шығын}(q) \approx \epsilon + \eta_{\text{инст}}\, q теңдеуін сәйкестеу BTC-ке шаққандағы лездік әсерді береді. Модельдің қарқынға негізделген η\eta-на айналдыру үшін кітаптың қалпына келу уақыты Δtr\Delta t_r (BTCUSDT үшін шамамен 10–60 секунд) деген болжам қажет: vv қарқынымен сауда әр жаңарту циклінде vΔtrv \Delta t_r жұтады, сондықтан ηηинстΔtr\eta \approx \eta_{\text{инст}} \Delta t_r. Дәл осы болжам — лезде, толық қалпына келу тұрақты сағат бойынша — Obizhaeva-Wang моделінің кіретін тесігі; төменде толығырақ. B жолы — іске асырылған сырғанауды қатысу қарқынына регрессиялау. Агрессивті (тейкер) ағынды 1 минуттық бинге топтастырыңыз; әр бин үшін тейкер жағының VWAP минус ашылу мид-бағасын тейкер көлем қарқынына регрессиялаңыз. B жолы нарықтың агрессорлардан нақты алған ақысын өлшейді; A жолы қазіргі уақытта тұрған кітаптың алатын ақысын өлшейді. Олар 3 еседен көп айырмашылықта болса, деңгей үшін B-ге, күн ішіндегі форма үшін A-ға сенген жөн.

γ\gamma: Kyle стиліндегі регрессия арқылы тұрақты әсер

Мид-баға өзгерісін 5 минуттық терезелердегі таза тейкер ағынына регрессиялаңыз:

ΔS5m=γQnet+шу,Qnet=тейкер сатып алулартейкер сатулар.\Delta S_{5m} = \gamma\, Q_{\text{net}} + \text{шу}, \qquad Q_{\text{net}} = \text{тейкер сатып алулар} - \text{тейкер сатулар}.

Содан кейін әсер бір терезеден кейін кайта оралмағанын тексеріңіз — қайтпайтын компонент сіздің сауда уақыт масштабыңызда "тұрақты" болып саналады. Бұл — үшеуінің ішінде ең шулысы, айтарлықтай айырмашылықпен.

Тек ашық Binance REST соңғы нүктелерін пайдаланатын жұмыс істейтін код:

import requests, numpy as np, pandas as pd

B = "https://api.binance.com/api/v3"
sym = "BTCUSDT"

kl = requests.get(f"{B}/klines", params=dict(
    symbol=sym, interval="1m", limit=1000)).json()
close = np.array([float(k[4]) for k in kl])
sigma = np.diff(close).std() * np.sqrt(60)       # $/sqrt(h)

d = requests.get(f"{B}/depth",
                 params=dict(symbol=sym, limit=5000)).json()
bids = np.array(d["bids"], dtype=float)          # [price, qty]
mid = (bids[0, 0] + float(d["asks"][0][0])) / 2
cq = np.cumsum(bids[:, 1])                       # cum qty
cn = np.cumsum(bids[:, 0] * bids[:, 1])          # cum notional
sizes = np.linspace(0.5, 50, 40)                 # BTC probes
cost = [mid - np.interp(q, cq, cn) / q for q in sizes]
eps, eta_inst = np.polyfit(sizes, cost, 1)[::-1] # cost ~ eps + k*q
eta = eta_inst * (30 / 3600)                     # 30s refresh -> $*h/BTC

tr = requests.get(f"{B}/aggTrades",
                  params=dict(symbol=sym, limit=1000)).json()
df = pd.DataFrame(dict(
    t=[t["T"] for t in tr],
    p=[float(t["p"]) for t in tr],
    q=[float(t["q"]) * (-1 if t["m"] else 1) for t in tr]))
df["bin"] = df.t // 300_000                      # 5-min bins
g = df.groupby("bin").agg(dp=("p", lambda s: s.iloc[-1] - s.iloc[0]),
                          qn=("q", "sum"))
gamma = np.polyfit(g.qn, g.dp, 1)[0]             # $/BTC
print(f"sigma={sigma:.0f} $/sqrt(h)  eta={eta:.2f} $*h/BTC  "
      f"gamma={gamma:.3f} $/BTC")

Өндірістік қолдану үшін бір ғана aggTrades бетінің орнына тарихи дампілердің бірнеше күнін алып, γ\gamma регрессиясын бірер мыңдаған бинде жүргізіңіз, бірнеше ғана бин емес.

Неге криптодағы калибрлеу шулы, және онымен не істеу керек

γ\gamma регрессиясын нақты деректерде жүргізсеңіз, бірнеше пайыздық R2R^2 мен күн сайын 2–5 есе өзгеретін коэффициент аласыз. Бұл кодыңыздағы қате емес. Себептері құрылымдық сипатта:

  • Эндогенділік. Ағын бағаға қаншалықты әсер етсе, баға да ағынға соншалықты әсер етеді. Импульс трейдерлері баға көтерілгендіктен сатып алады; қайтарымдарды ағынға қарапайым OLS регрессиялау олардың реакциясын тіркеп, оны әсер деп қате қабылдайды. Таза шешім — өз орындалуларыңызды пайдалану (олар табиғатынан экзогенді) — бірақ бұл сізде бір уақыт сауда жасағаннан кейін ғана пайда болады.
  • Ойыстық (concavity). Нақты әсер көлемге қатысты ойыс — эмпирикалық түрде квадрат түбірге жақын (Almgren, Thum, Hauptmann және Li, 2005, "Direct estimation of equity market impact" мақаласында дәреже көрсеткіші шамамен 0.6 екенін тапты; дәл осындай ойыстық криптода да тұрақты байқалады). Ойыс функцияға түзу сызық сәйкестеу η\eta мен γ\gamma-ның таңдама көлем диапазонына тәуелді болуына әкеледі. Нақты сауда жасайтын қатысу қарқындарында калибрлеңіз.
  • Фрагментация және туынды құралдардың жетекшілігі. Binance-тегі BTCUSDT спот нарығы — көптеген алаңдардың біреуі ғана, ал баға түзілу жиі перп фьючерстерінде орын алады. Сіз көрмейтін ағын регрессиялап отырған бағаны қозғайды, бұл шу мүшесін ұлғайтады.
  • Режимге тәуелділік. Азия сессиясында өлшенген η\eta АҚШ ашылуын сипаттамайды; құбылмалылық екі есе артқанда әсер де шамамен екі есе артады. Сессия бойынша калибрлеңіз және кемінде апта сайын қайта сәйкестеңіз.

Құтқарушы жайт: траектория кешірімді. κ1/η\kappa \propto \sqrt{1/\eta}, сондықтан η\eta-дағы екі есе қате κ\kappa-ны тек 2\sqrt{2} есе ғана жылжытады, ал шығын функциясы оптимум маңында тегіс. η\eta-ны екі еседей дәлдікпен, ал λ\lambda-ны шамалар ретімен дұрыс алу TWAP-қа қарағанда қолжетімді жақсартудың басым бөлігін қамтиды. Дәлдік сауда алдындағы шығынды бағалау үшін маңызды; тұрақтылық жоспарлау үшін жеткілікті.

Модель қайда бұзылады, және қандай мақалалар оны түзетеді

Almgren-Chriss — бір қаңқа, әрі қай арқалық жүк көтеретінін дәл білу қай кеңейтуге жүгіну керегін көрсетеді.

Сызықтық емес әсер — Almgren (2003). "Optimal execution with nonlinear impact functions and trading-enhanced risk" (Applied Mathematical Finance 10, 1–18) бағдарламаны дәрежелік заңды уақытша әсермен h(v)=ηvαh(v) = \eta v^\alpha қайта жасайды. Эмпирикалық түрде қолдау тапқан α1/2\alpha \approx 1/2 үшін — квадрат түбір заңы — оңтайлы траекториялардың сипаты өзгереді: ойыс әсер жарылысты сызықтық әсерге қарағанда азырақ жазалайды, сондықтан дәл сол λ\lambda кезінде оңтайлы кестелер алдын-ала көбірек жүктеледі. Сапалық құрылым (шұғылдық параметрі, тиімді шекара) сақталады, бірақ sinh формуласы сақталмайды.

Тұрақтылық және LOB — Obizhaeva және Wang (2013). "Optimal trading strategy and supply/demand dynamics" (Journal of Financial Markets 16(1), 1–32; жұмыс нұсқасы 2005 жылдан бастап таралды) уақытша/тұрақты дихотомияны шектеулі тереңдігі бар және экспоненциалды түрде ыдырайтын әсері бар лимиттік ордер кітабымен ауыстырады: сауда кітапты жұтады, ал кітап ρ\rho тұрақтылық қарқынымен қалпына келеді. AC-тың "уақытша әсер лезде жойылады" деген болжамы — ρ\rho \to \infty шегі. Оңтайлы стратегия түбегейлі өзгереді: басында блок сауда, соңында блок сауда, ал ортасында тұрақты сауда қарқыны — блоктар кітаптың қалпына келуін пайдаланады. Егер сіздің дербес ордер интервалыңыз алаңның қалпына келу уақытына жуық болса (криптода бұл секундтан минутқа дейін — жиі солай болады), сіз Almgren-Chriss емес, Obizhaeva-Wang аймағында тұрсыз, ал жоғарыдағы калибрлеудегі Δtr\Delta t_r болжамы — сіздің ескерту белгіңіз.

Динамикалық арбитраждың жоқтығы — Gatheral (2010). "No-dynamic-arbitrage and market impact" (Quantitative Finance 10(7), 749–759) лездік әсер функциясы f(v)f(v) мен ыдырау ядросы G(t)G(t)-нің қандай тіркестері ішкі түрде үйлесімді екенін, яғни теріс күтілетін шығыны бар айналымдық стратегияға жол бермейтінін сұрайды. Нәтижелер айқын: экспоненциалды ыдырау тек сызықтық әсермен үйлесімді — экспоненциалды ыдырауды квадрат түбір әсерімен біріктірсеңіз, модельді тербелмелі сауда тізбегімен "сорып алуға" болады; сызықтық емес әсер дәрежелік ыдырауды талап етеді, екі көрсеткішті байланыстыратын теңсіздікпен (әсер vδ\sim v^\delta және ыдырау tγd\sim t^{-\gamma_d} үшін шамамен γd+δ1\gamma_d + \delta \geq 1). Бұл — әсер моделіңізге тартымды ыдырау ядросын бекітпес бұрын оқитын мақала: көптеген еркін тіркестер жасырын түрде арбитраждалатын болып шығады, бұл іс жүзінде сіздің оптимизаторыңыз арбитражды тауып, оғаш тербелмелі кестелер жасайтынын білдіреді. Егер сіздің "оңтайлы" траекторияңыз таза ликвидация кезінде сатып алу мен сатуды кезектестірсе, сіз Gatheral шартын бұзғансыз, альфа таппағансыз.

ML жалғасы. Осы серияда екі бағыт тікелей осы қаңқаға негізделеді. Біріншісі — күшейтілген оқыту арқылы орындау: әсердің сызықтық емес, күйге тәуелді және жартылай бақыланатын екенін мойындасаңыз, жабық түрдегі шешім жоғалады, ал RL (Nevmyvaka, Feng және Kearns-тің 2006 жылғы Q-оқыту мақаласынан бастап) траектория кеңістігін іздестірудің табиғи жолы — бірақ әрбір байыпты RL орындау агенті AC шешімімен салыстырылады, әрі жиі одан бастама алады. Екіншісі — нейрондық баға-әсер модельдері: h(v)=ηvh(v) = \eta v функциясын ордер кітабы күйінің үйренілген функционалымен ауыстыру, орта-дисперсия жоспарлау логикасын үстінде сақтай отырып. Екі жалғасы да сызықтық-Гаусс базалық сызбаның нақты не екенін және неге дәл осындай пішінде екенін білмей мағынасы болмайды.

Не есте сақтау керек

Модель — үш болжам, бір айырымдық теңдеу және бір сан. Сызықтық тұрақты әсер (манипуляциясыздық талап еткен), сызықтық уақытша әсер (айналасында калибрленетін жуықтау), арифметикалық броундық шу. Оптимум активтегі қалдық дисперсиясы мен әсер шығынын теңестіреді, бүкіл стратегия шұғылдық κ=λσ2/η\kappa = \sqrt{\lambda\sigma^2/\eta} санына жиналады, ал TWAP λ=0\lambda = 0 деп аталатын шектік жағдай ретінде шығады — модельдегі ең пайдалы факт, себебі ол "мұны TWAP-пен жасау керек пе?" деген сұрақты әдетке емес, тәуекелге жанашырлық туралы тексерілетін тұжырымға айналдырады. Калибрлеу — нақты жұмыс: σ\sigma оңай, η\eta екі еседей дәлдіктің ойыны, γ\gamma бір зерттеу жобасы, ал траектория үшеуін де кешіреді. Оны бір түскі уақытта іске асырыңыз, ал айдың қалғанын регрессия диагностикасына жұмсаңыз.

Дереккөздер

  • Almgren, R., Chriss, N. (2001). "Optimal execution of portfolio transactions." Journal of Risk, 3(2), 5–39.
  • Almgren, R. (2003). "Optimal execution with nonlinear impact functions and trading-enhanced risk." Applied Mathematical Finance, 10(1), 1–18.
  • Almgren, R., Thum, C., Hauptmann, E., Li, H. (2005). "Direct estimation of equity market impact." Risk, 18(7), 58–62.
  • Huberman, G., Stanzl, W. (2004). "Price manipulation and quasi-arbitrage." Econometrica, 72(4), 1247–1275.
  • Obizhaeva, A., Wang, J. (2013). "Optimal trading strategy and supply/demand dynamics." Journal of Financial Markets, 16(1), 1–32.
  • Gatheral, J. (2010). "No-dynamic-arbitrage and market impact." Quantitative Finance, 10(7), 749–759.
  • Nevmyvaka, Y., Feng, Y., Kearns, M. (2006). "Reinforcement learning for optimized trade execution." ICML 2006.
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 сауда талдаулары, нарық аналитикасы және платформа жаңалықтары үшін біздің ақпараттық бюллетеньге жазылыңыз.

Біз сіздің жекелігіңізді құрметтейміз. Кез келген уақытта жазылымнан шығуға болады.