← लेखों की सूची पर वापस जाएँ
July 14, 2026
5 मिनट का पठन

Almgren-Chriss बिना लाग-लपेट के: ऑप्टिमल एक्जीक्यूशन जिसे आप एक दोपहर में लागू कर सकते हैं

Almgren-Chriss बिना लाग-लपेट के: ऑप्टिमल एक्जीक्यूशन जिसे आप एक दोपहर में लागू कर सकते हैं
#एक्जीक्यूशन
#Almgren-Chriss
#मार्केट इम्पैक्ट
#ऑप्टिमल एक्जीक्यूशन
#TWAP
#क्वांट
#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, जिसमें ट्रेड्स nk=xk1xkn_k = x_{k-1} - x_k इंटरवल kk में एक्जीक्यूट होते हैं।

तीन धारणाएं पूरे मॉडल को संभालती हैं:

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 पर ट्रेडिंग करने से प्राइस स्थायी रूप से, आनुपातिक रूप से शिफ्ट होती है, और यह शिफ्ट कभी क्षय (decay) नहीं होती। आप जो भी यूनिट बेचते हैं वह मिड-प्राइस को हमेशा के लिए γ\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 बिड-आस्क स्प्रेड का आधा हिस्सा और फीस को कैप्चर करता है; η\eta दर vv पर लिक्विडिटी की मांग की मार्जिनल कॉस्ट का स्लोप है। टेम्परेरी इम्पैक्ट सिर्फ आपकी अपनी फिल को प्रभावित करता है और तुरंत गायब हो जाता है — आपके अगले चाइल्ड ऑर्डर से पहले बुक पूरी तरह भर जाती है। "लीनियर", "तुरंत", और "पूरी तरह" — इन तीनों शब्दों में से हर एक वास्तविक बाजारों में गलत साबित होता है, और आखिरी सेक्शन इस बात पर है कि कितना गलत। लेकिन पहले, इन्हें स्वीकार करने का फायदा देखते हैं।

ट्रैजेक्टरी की कॉस्ट और वेरिएंस

फिल्स को जोड़ें, इनिशियल मार्क XS0X S_0 से घटाएं, और आपको इम्प्लीमेंटेशन शॉर्टफॉल मिलता है। नॉइज़ ξ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 रिस्क एवर्जन है, इकाई 1/डॉलर में। इंटीरियर पॉइंट्स के लिए 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 देता है xj0x_j \to 0 सभी j>0j > 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 को स्लोप के रूप में दिखाती है

फ्रंटियर सवाल को फिर से फ्रेम करता है — "λ\lambda क्या है?" जिसका जवाब कोई भी आत्मनिरीक्षण से नहीं दे सकता — इसकी जगह "मुझे किस कॉस्ट/रिस्क ट्रेड-ऑफ की जरूरत है?" जिसका जवाब कोई भी डेस्क वाकई दे सकता है। पॉइंट चुनने के तीन व्यावहारिक तरीके:

  1. मार्जिनल-कॉस्ट रीज़निंग। फ्रंटियर पर चलें और पूछें: "इस पॉइंट से अगले पॉइंट पर जाने में, मैं शॉर्टफॉल की स्टैंडर्ड डेविएशन में Δstd\Delta\text{std} डॉलर हटाने के लिए ΔE\Delta E डॉलर एक्सपेक्टेड कॉस्ट चुका रहा हूं — क्या मैं यह ट्रेड लूं?" फ्रंटियर का घुटना (knee) आमतौर पर 2 के फैक्टर के भीतर स्पष्ट होता है, और इस रेज़ोल्यूशन पर ट्रैजेक्टरी λ\lambda के प्रति असंवेदनशील है।
  2. रिस्क बजट। एक अधिकतम स्वीकार्य शॉर्टफॉल std तय करें (जैसे "रेजिड्युअल पोज़िशन का वन-डे 1-सिग्मा नोशनल के 15 bps से कम रहना चाहिए") और उसे संतुष्ट करने वाली सबसे सस्ती ट्रैजेक्टरी लें। यह एक कंस्ट्रेंड प्रॉब्लम है जिसका लैग्रेंज मल्टीप्लायर ही λ\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 = $600प्रतिBTCप्रतिप्रति 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।शॉर्टफॉलstd:। शॉर्टफॉल std: $53{,}000बनामTWAPकेलिएबनाम TWAP के लिए$69{,}300। तो \10M नोशनल पर एक्सपेक्टेड कॉस्ट के अतिरिक्त 0.8 bps के बदले आप शॉर्टफॉल रिस्क को 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 माइनस मिड। cost(q)ϵ+ηinstq\text{cost}(q) \approx \epsilon + \eta_{\text{inst}}\, q फिट करने से इंस्टेंटेनियस इम्पैक्ट प्रति BTC मिलता है। मॉडल के रेट-बेस्ड η\eta में कन्वर्ट करने के लिए आपको एक बुक रीप्लेनिशमेंट टाइम Δtr\Delta t_r मानना होगा (BTCUSDT के लिए लगभग 10–60 सेकंड): दर vv पर ट्रेडिंग हर रीफ्रेश साइकल में vΔtrv \Delta t_r कंज्यूम करती है, इसलिए ηηinstΔtr\eta \approx \eta_{\text{inst}} \Delta t_r। यही धारणा — तत्काल, पूर्ण रीप्लेनिशमेंट एक निश्चित घड़ी पर — वह दरार है जिसके ज़रिए Obizhaeva-Wang प्रवेश करता है; इस पर आगे और चर्चा। रूट B — पार्टिसिपेशन पर रियलाइज़्ड स्लिपेज को रिग्रेस करें। आक्रामक (टेकर) फ्लो को 1-मिनट बिन्स में बकेट करें; हर बिन के लिए, टेकर-साइड VWAP-माइनस-ओपन-मिड को टेकर वॉल्यूम रेट पर रिग्रेस करें। रूट B यह मापता है कि मार्केट ने वाकई अग्रेसर्स से क्या चार्ज किया; रूट A यह मापता है कि रेस्टिंग बुक अभी क्या चार्ज करेगी। जब ये दोनों 3 के फैक्टर से असहमत हों, तो लेवल के लिए B पर और इंट्राडे शेप के लिए A पर भरोसा करें।

γ\gamma: Kyle-स्टाइल रिग्रेशन से परमानेंट इम्पैक्ट

मिड-प्राइस चेंजेस को 5-मिनट विंडोज़ में सिग्नड नेट टेकर फ्लो पर रिग्रेस करें:

ΔS5m=γQnet+noise,Qnet=taker buystaker sells.\Delta S_{5m} = \gamma\, Q_{\text{net}} + \text{noise}, \qquad Q_{\text{net}} = \text{taker buys} - \text{taker sells}.

फिर चेक करें कि एक विंडो बाद इम्पैक्ट रिवर्ट नहीं हुआ है — नॉन-रिवर्टिंग कॉम्पोनेंट आपकी ट्रेडिंग टाइमस्केल पर "परमानेंट" है। यह तीनों में से सबसे नॉइज़ी है, बड़े मार्जिन से।

काम करने वाला कोड, सिर्फ पब्लिक 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 रिग्रेस करना उनकी प्रतिक्रिया पकड़ लेता है और उसे इम्पैक्ट मान लेता है। साफ फिक्स है अपनी खुद की फिल्स का इस्तेमाल करना (डिज़ाइन से एक्सोजेनस) — जो आपको तभी मिलेंगी जब आप कुछ समय ट्रेड कर चुके हों।
  • कॉन्केविटी। असली इम्पैक्ट साइज़ में कॉन्केव होता है — एम्पिरिकली स्क्वेयर-रूट के करीब (Almgren, Thum, Hauptmann and Li, 2005, "Direct estimation of equity market impact" में लगभग 0.6 का एक्सपोनेंट पाया गया; यही कॉन्केविटी क्रिप्टो में भी मजबूती से दिखती है)। एक कॉन्केव फंक्शन में लाइन फिट करने का मतलब है कि आपके η\eta और γ\gamma सैंपल की साइज़ रेंज पर निर्भर करते हैं। उन्हीं पार्टिसिपेशन रेट्स पर कैलिब्रेट करें जिन पर आप वाकई ट्रेड करेंगे।
  • फ्रैगमेंटेशन और डेरिवेटिव लीडरशिप। Binance पर BTCUSDT स्पॉट कई वेन्यूज़ में से एक है, और प्राइस डिस्कवरी अक्सर पर्प्स पर होती है। वह फ्लो जो आप कभी नहीं देखते, उस प्राइस को हिलाता है जिस पर आप रिग्रेस कर रहे हैं, जिससे नॉइज़ टर्म बढ़ जाता है।
  • रीजिम डिपेंडेंस। एशिया सेशन में मापा गया η\eta US ओपन का वर्णन नहीं करता; जब वोलैटिलिटी दोगुनी होती है तो इम्पैक्ट लगभग दोगुना हो जाता है। सेशन के हिसाब से कैलिब्रेट करें, और कम से कम साप्ताहिक रूप से फिर से फिट करें।

राहत की बात: ट्रैजेक्टरी क्षमाशील है। κ1/η\kappa \propto \sqrt{1/\eta}, इसलिए η\eta में 2 के फैक्टर की गलती κ\kappa को केवल 2\sqrt{2} से हिलाती है, और कॉस्ट फंक्शन ऑप्टिमम के पास फ्लैट होता है। η\eta को 2 के फैक्टर के भीतर सही पाना और λ\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 and Wang (2013)। "Optimal trading strategy and supply/demand dynamics" (Journal of Financial Markets 16(1), 1–32; वर्किंग पेपर 2005 से सर्कुलेट हो रहा था) टेम्परेरी/परमानेंट के द्वैत को एक लिमिट ऑर्डर बुक से बदल देता है जिसकी फाइनाइट डेप्थ और एक्सपोनेंशियली डिकेइंग इम्पैक्ट होता है: आपका ट्रेड बुक को खा जाता है, और बुक रेजिलिएंस रेट ρ\rho पर फिर से भरती है। AC की "टेम्परेरी इम्पैक्ट तुरंत गायब हो जाता है" वाली धारणा ρ\rho \to \infty की लिमिट है। ऑप्टिमल स्ट्रैटेजी का शेप नाटकीय रूप से बदल जाता है: शुरुआत में एक ब्लॉक ट्रेड, अंत में एक ब्लॉक, और बीच में एक कॉन्स्टेंट ट्रेडिंग रेट — ये ब्लॉक्स बुक की रिकवरी का फायदा उठाते हैं। अगर आपका चाइल्ड-ऑर्डर इंटरवल वेन्यू के रीप्लेनिशमेंट टाइम के बराबर है (क्रिप्टो में, सेकंड से एक मिनट तक — अक्सर ऐसा ही होता है), तो आप Obizhaeva-Wang के क्षेत्र में हैं, Almgren-Chriss के क्षेत्र में नहीं, और ऊपर के कैलिब्रेशन में Δ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 and Kearns के 2006 के Q-learning पेपर से आगे) ट्रैजेक्टरी स्पेस को खोजने का एक स्वाभाविक तरीका है — लेकिन हर गंभीर RL एक्जीक्यूशन एजेंट को AC सॉल्यूशन के मुकाबले बेंचमार्क किया जाता है, और अक्सर उसी से इनिशियलाइज़ किया जाता है। दूसरा, न्यूरल प्राइस-इम्पैक्ट मॉडल्स: h(v)=ηvh(v) = \eta v को ऑर्डर बुक स्टेट के एक सीखे हुए फंक्शनल से बदलना, जबकि ऊपर मीन-वेरिएंस शेड्यूलिंग लॉजिक को बनाए रखना। इनमें से कोई भी सीक्वल यह जाने बिना मायने नहीं रखता कि लीनियर-गॉसियन बेसलाइन वास्तव में क्या है और इसका फॉर्म ऐसा क्यों है।

क्या सीखकर ले जाएं

मॉडल तीन धारणाएं, एक डिफरेंस इक्वेशन, और एक नंबर है। लीनियर परमानेंट इम्पैक्ट (नो-मैनिपुलेशन द्वारा मजबूर), लीनियर टेम्परेरी इम्पैक्ट (एक अप्रॉक्सिमेशन जिसके इर्द-गिर्द आप कैलिब्रेट करते हैं), एरिथमेटिक ब्राउनियन नॉइज़। ऑप्टिमम इन्वेंटरी वेरिएंस को इम्पैक्ट कॉस्ट के मुकाबले ट्रेड-ऑफ करता है, पूरी स्ट्रैटेजी अर्जेंसी κ=λσ2/η\kappa = \sqrt{\lambda\sigma^2/\eta} में सिमट जाती है, और TWAP λ=0\lambda = 0 के डिजेनरेट केस के रूप में निकल आता है — जो मॉडल में सबसे उपयोगी तथ्य है, क्योंकि यह "क्या हमें इसे TWAP करना चाहिए?" को आदत के मामले से बदलकर रिस्क एवर्जन के बारे में एक जांचने योग्य दावे में बदल देता है। कैलिब्रेशन असली काम है: σ\sigma आसान है, η\eta 2 के फैक्टर का खेल है, γ\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 ट्रेडिंग इनसाइट्स, मार्केट एनालिसिस और प्लेटफ़ॉर्म अपडेट के लिए हमारे न्यूज़लेटर को सब्सक्राइब करें।

हम आपकी गोपनीयता का सम्मान करते हैं। किसी भी समय अनसब्सक्राइब करें।