Almgren-Chriss बिना लाग-लपेट के: ऑप्टिमल एक्जीक्यूशन जिसे आप एक दोपहर में लागू कर सकते हैं
Almgren और Chriss (2001) का पेपर "Optimal execution of portfolio transactions" (Journal of Risk 3(2), 5–39) शायद एक्जीक्यूशन रिसर्च में सबसे ज्यादा उद्धृत किया जाने वाला पेपर है, और साथ ही सबसे कम सही ढंग से इम्प्लीमेंट किया जाने वाला भी। बाहर मौजूद ज्यादातर "Almgren-Chriss" कोड दरअसल एक कमेंट ब्लॉक के साथ लिपटा हुआ TWAP शेड्यूलर भर है। इस पर लिखी ज्यादातर ब्लॉग पोस्ट्स डिराइवेशन को छोड़ देती हैं, sinh फंक्शन की ओर हाथ हिलाकर इशारा भर करती हैं, और उस हिस्से को कभी नहीं छूतीं जो प्रोडक्शन में असल मायने रखता है: पैरामीटर आते कहां से हैं।
यह लेख पूरा काम करता है। मॉडल की धारणाएं, ईमानदारी से बताई गई। क्लोज्ड-फॉर्म ट्रैजेक्टरी, डिराइव की गई, न कि सिर्फ दावे के रूप में पेश की गई। एफिशिएंट फ्रंटियर और रिस्क-एवर्जन पैरामीटर कैसे चुनें। और तीन इनपुट्स का कैलिब्रेशन — टेम्परेरी इम्पैक्ट , परमानेंट इम्पैक्ट , वोलैटिलिटी — Binance ऑर्डर बुक और ट्रेड डेटा से, साथ में काम करने वाला Python कोड और यह ईमानदार चर्चा कि फिट क्यों नॉइज़ी है। यही पूरे एक्जीक्यूशन डोमेन की बौद्धिक रीढ़ है: TWAP, VWAP, और POV इसी के विशेष मामले या हेयुरिस्टिक चचेरे भाई हैं (देखें TWAP, VWAP, POV: वे एक्जीक्यूशन एल्गोरिदम जिन्हें हर कोई चलाता है), और आधुनिक ML अप्रोच — रीइन्फोर्समेंट लर्निंग शेड्यूलर्स और न्यूरल इम्पैक्ट मॉडल — दरअसल उन्हीं धारणाओं को ढीला करने की कोशिशें हैं जिन्हें हम अभी लिखने जा रहे हैं।
सेटअप: मॉडल वास्तव में क्या मानता है
आपके पास किसी एसेट की यूनिट्स हैं (मान लीजिए 100 BTC) और आपको समय तक पूरी तरह लिक्विडेट करना है। को लंबाई के इंटरवल्स में बांट लीजिए। आपका डिसीजन वेरिएबल है होल्डिंग्स ट्रैजेक्टरी , जिसमें ट्रेड्स इंटरवल में एक्जीक्यूट होते हैं।
तीन धारणाएं पूरे मॉडल को संभालती हैं:
1. एरिथमेटिक रैंडम वॉक। अनपर्टर्ब्ड प्राइस इस तरह चलती है
जहां आई.आई.डी. स्टैंडर्ड नॉर्मल हैं और एब्सोल्यूट वोलैटिलिटी है (डॉलर प्रति यूनिट समय, प्रतिशत नहीं)। एरिथमेटिक, ज्योमेट्रिक नहीं — कुछ घंटों में यह अंतर नगण्य होता है, और एरिथमेटिक वॉक बीजगणित को लीनियर-क्वाड्रैटिक बनाए रखता है। कोई ड्रिफ्ट नहीं: Almgren और Chriss ड्रिफ्ट टर्म की चर्चा करते हैं, लेकिन इंट्राडे लिक्विडेशन के लिए 4 घंटे में आपका अल्फा एस्टिमेट लगभग हमेशा नॉइज़ ही होता है, और इसे शून्य सेट करना ही ईमानदार डिफॉल्ट है।
2. लीनियर परमानेंट इम्पैक्ट। : दर पर ट्रेडिंग करने से प्राइस स्थायी रूप से, आनुपातिक रूप से शिफ्ट होती है, और यह शिफ्ट कभी क्षय (decay) नहीं होती। आप जो भी यूनिट बेचते हैं वह मिड-प्राइस को हमेशा के लिए से नीचे धकेल देती है। यह भोंडा लग सकता है, लेकिन इसे लीनियर रखने की एक गहरी वजह है: Huberman और Stanzl (2004) ने साबित किया कि परमानेंट इम्पैक्ट जो ट्रेड साइज़ में नॉनलीनियर है, राउंड-ट्रिप स्ट्रैटेजीज़ की अनुमति देती है जिनका एक्सपेक्टेड प्रॉफिट पॉज़िटिव होता है — यानी प्राइस मैनिपुलेशन। लीनियर परमानेंट इम्पैक्ट सुविधा के लिए किया गया सरलीकरण नहीं है; यह इस श्रेणी के मॉडल्स में एकमात्र आर्बिट्रेज-फ्री विकल्प है।
3. लीनियर टेम्परेरी इम्पैक्ट। इंटरवल में आपको वास्तव में जो प्राइस मिलती है वह है
बिड-आस्क स्प्रेड का आधा हिस्सा और फीस को कैप्चर करता है; दर पर लिक्विडिटी की मांग की मार्जिनल कॉस्ट का स्लोप है। टेम्परेरी इम्पैक्ट सिर्फ आपकी अपनी फिल को प्रभावित करता है और तुरंत गायब हो जाता है — आपके अगले चाइल्ड ऑर्डर से पहले बुक पूरी तरह भर जाती है। "लीनियर", "तुरंत", और "पूरी तरह" — इन तीनों शब्दों में से हर एक वास्तविक बाजारों में गलत साबित होता है, और आखिरी सेक्शन इस बात पर है कि कितना गलत। लेकिन पहले, इन्हें स्वीकार करने का फायदा देखते हैं।
ट्रैजेक्टरी की कॉस्ट और वेरिएंस
फिल्स को जोड़ें, इनिशियल मार्क से घटाएं, और आपको इम्प्लीमेंटेशन शॉर्टफॉल मिलता है। नॉइज़ पर इसका एक्सपेक्टेशन और वेरिएंस इस प्रकार हैं:
जहां (एक डिस्क्रीटाइज़ेशन करेक्शन जो होने पर गायब हो जाता है)।
दो अवलोकन जिन्हें ज्यादातर इम्प्लीमेंटेशन मिस कर देते हैं:
- परमानेंट कॉस्ट ट्रैजेक्टरी पर निर्भर नहीं करती। लीनियर, नॉन-डिकेइंग परमानेंट इम्पैक्ट के साथ, आप चाहे जैसे भी शेड्यूल करें, वही परमानेंट टोल चुकाते हैं। ऑप्टिमाइज़ेशन पूरी तरह टेम्परेरी-कॉस्ट टर्म (जो धीमी, बराबर-बराबर ट्रेडिंग चाहता है — यह यानी TWAP पर न्यूनतम होता है) और वेरिएंस टर्म (जो चाहता है कि आपकी इन्वेंटरी कल ही खत्म हो जाए — यह तत्काल लिक्विडेशन पर न्यूनतम होता है) के बीच की लड़ाई है।
- वेरिएंस टर्म इन्वेंटरी-वेटेड है, ट्रेड-वेटेड नहीं। रिस्क उस पर जमा होता है जो आप अभी भी होल्ड कर रहे हैं, , न कि उस पर जो आप ट्रेड कर रहे हैं। यही वजह है कि अर्जेंसी शेड्यूल को शुरुआत में भारी कर देती है।
क्लोज्ड फॉर्म: sinh, cosh, और अर्जेंसी पैरामीटर
Almgren-Chriss मीन-वेरिएंस ऑब्जेक्टिव को न्यूनतम करते हैं
जहां रिस्क एवर्जन है, इकाई 1/डॉलर में। इंटीरियर पॉइंट्स के लिए सेट करें। टेम्परेरी टर्म के सेकंड डिफरेंस देता है, वेरिएंस टर्म खुद देता है, और आपको एक लीनियर सेकंड-ऑर्डर डिफरेंस इक्वेशन मिलती है:
यह का डिस्क्रीट एनालॉग है, और बाउंडरी कंडीशन्स , के साथ सॉल्यूशन हाइपरबॉलिक है:
जहां इसका हल है , जो छोटे के लिए लगभग होता है।

स्ट्रैटेजी के बारे में सब कुछ एक ही नंबर में समाया हुआ है:
ही अर्जेंसी है। इसका रेसिप्रोकल ट्रेड का करैक्टरिस्टिक टाइम है: वह टाइमस्केल जिस पर इम्पैक्ट कॉस्ट बचाने के लिए इन्वेंटरी रिस्क होल्ड करना उचित है। ध्यान दीजिए किस पर निर्भर नहीं करता: ऑर्डर साइज़ और डेडलाइन पर। आपके ट्रेड का इंट्रिंसिक टाइमस्केल 20 मिनट है या 6 घंटे — यह सिर्फ रिस्क एवर्जन, वोलैटिलिटी, और लिक्विडिटी से तय होता है। अगर , तो आपकी डेडलाइन अप्रासंगिक है — मॉडल अपने ही शेड्यूल पर लिक्विडेट करता है और होराइज़न की पूंछ इस्तेमाल नहीं होती। अगर , तो डेडलाइन बाध्यकारी है और आप प्रभावी रूप से TWAP ही कर रहे हैं।
रिस्क-न्यूट्रल लिमिट ही TWAP है — यही वजह है कि TWAP अस्तित्व में है
लीजिए, तो । तब और
ऑप्टिमल ट्रैजेक्टरी सीधी रेखा में तब्दील हो जाती है: बराबर समय अंतरालों में बराबर मात्राएं। TWAP कोई हेयुरिस्टिक नहीं है जो संयोगवश काम कर जाता है; यह लीनियर इम्पैक्ट के साथ रिस्क-न्यूट्रल ट्रेडर के लिए Almgren-Chriss मॉडल का ठीक-ठीक ऑप्टिमम है। जब भी कोई TWAP चलाता है, वह परोक्ष रूप से यह दावा कर रहा होता है कि : "मुझे अपने शॉर्टफॉल के वेरिएंस की परवाह नहीं, सिर्फ उसके मीन की है।" छोटे ऑर्डर्स और छोटे होराइज़न्स के लिए यह एक तर्कसंगत स्थिति है। लेकिन 4% डेली वोल वाले एसेट में 8 घंटों में डेली वॉल्यूम का 5% लिक्विडेट करने के लिए यह एक अजीब स्थिति है — जो कि ठीक वही जगह है जहां लोग इसे वैसे भी चलाते हैं। विपरीत लिमिट देता है सभी के लिए: पहले ही इंटरवल में सब कुछ डंप कर दें, चाहे जो भी कीमत चुकानी पड़े। इन दोनों छोरों के बीच, इंटरपोलेट करता है: TWAP से मुश्किल से अलग पहचाना जा सकता है, आक्रामक रूप से फ्रंट-लोडेड है।
एक्जीक्यूशन का एफिशिएंट फ्रंटियर
हर के लिए आपको एक ट्रैजेक्टरी, एक एक्सपेक्टेड कॉस्ट , और एक वेरिएंस मिलता है। को स्वीप करने पर प्लेन में एक कर्व बनता है — एक्जीक्यूशन का एफिशिएंट फ्रंटियर, बिल्कुल Markowitz के सीधे एनालॉग में। यह कॉन्वेक्स और घटता हुआ है: कम वेरिएंस हमेशा ज्यादा एक्सपेक्टेड शॉर्टफॉल की कीमत पर आता है, और रिटर्न तेज़ी से घटते जाते हैं। किसी दिए गए द्वारा चुने गए फ्रंटियर पॉइंट पर, रिस्क एवर्जन टैंजेंट का (नेगेटिव) स्लोप है: ।

फ्रंटियर सवाल को फिर से फ्रेम करता है — " क्या है?" जिसका जवाब कोई भी आत्मनिरीक्षण से नहीं दे सकता — इसकी जगह "मुझे किस कॉस्ट/रिस्क ट्रेड-ऑफ की जरूरत है?" जिसका जवाब कोई भी डेस्क वाकई दे सकता है। पॉइंट चुनने के तीन व्यावहारिक तरीके:
- मार्जिनल-कॉस्ट रीज़निंग। फ्रंटियर पर चलें और पूछें: "इस पॉइंट से अगले पॉइंट पर जाने में, मैं शॉर्टफॉल की स्टैंडर्ड डेविएशन में डॉलर हटाने के लिए डॉलर एक्सपेक्टेड कॉस्ट चुका रहा हूं — क्या मैं यह ट्रेड लूं?" फ्रंटियर का घुटना (knee) आमतौर पर 2 के फैक्टर के भीतर स्पष्ट होता है, और इस रेज़ोल्यूशन पर ट्रैजेक्टरी के प्रति असंवेदनशील है।
- रिस्क बजट। एक अधिकतम स्वीकार्य शॉर्टफॉल std तय करें (जैसे "रेजिड्युअल पोज़िशन का वन-डे 1-सिग्मा नोशनल के 15 bps से कम रहना चाहिए") और उसे संतुष्ट करने वाली सबसे सस्ती ट्रैजेक्टरी लें। यह एक कंस्ट्रेंड प्रॉब्लम है जिसका लैग्रेंज मल्टीप्लायर ही है।
- करैक्टरिस्टिक-टाइम टारगेटिंग। सीधे चुनें ("इस ऑर्डर की हाफ-लाइफ 90 मिनट होनी चाहिए") और निकालें। ज्यादातर प्रैक्टिशनर्स परोक्ष रूप से यही करते हैं जब वे "अर्जेंसी" स्लाइडर सेट करते हैं।
एक वर्क्ड एग्जाम्पल, उन नंबरों के साथ जिन्हें हम कैलिब्रेशन सेक्शन में जस्टिफाई करेंगे। S_0 = \100{,}000X = 100T = 4\sigma = $600\sqrt{\text{घंटा}}\eta = 1.0\ $\cdot\text{घंटा}/\text{BTC}\lambda = 10^{-6}\ $^{-1}$। तब
ऑप्टिमल शेड्यूल पहले घंटे में 46.2 BTC बेचता है (TWAP: 25)। टेम्परेरी कॉस्ट: \eta \int_0^T v(t)^2 dt \approx \3{,}290$2{,}500$53{,}000$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) पर स्वीप करें और को के मुकाबले प्लॉट करें — यही आपका फ्रंटियर है, और पूरा डिसीजन सरफेस एक चार्ट में समा जाता है जिसे आप रिस्क कमेटी को दे सकते हैं।
कैलिब्रेशन: Binance डेटा से , ,
यहीं पर 90% इम्प्लीमेंटेशन चुपचाप दम तोड़ देते हैं। ट्रैजेक्टरी फॉर्मूला तुच्छ है; पैरामीटर नहीं हैं। तीन क्वांटिटीज़, तीन अलग-अलग एस्टिमेशन प्रॉब्लम्स।

: सबसे आसान वाला
रूट-आवर के प्रति एब्सोल्यूट वोलैटिलिटी, मिड-प्राइस रिटर्न्स से। 1-मिनट बार्स इस्तेमाल करें और स्केल करें; ज्यादा बारीक सैंपलिंग पर, माइक्रोस्ट्रक्चर नॉइज़ (बिड-आस्क बाउंस) रियलाइज़्ड वेरिएंस को ऊपर की ओर बायस कर देता है। यह एस्टिमेट ठोस है — वोल वह एकमात्र पैरामीटर है जिसे आप सही पाएंगे।
: बुक और ट्रेड्स से टेम्परेरी इम्पैक्ट
दो पूरक रास्ते। रूट A — L2 बुक को वॉक करें। डेप्थ स्नैपशॉट्स से, साइज़ के एक हाइपोथेटिकल मार्केटेबल स्वीप की कॉस्ट कैलकुलेट करें: कंज्यूम की गई लेवल्स का VWAP माइनस मिड। फिट करने से इंस्टेंटेनियस इम्पैक्ट प्रति BTC मिलता है। मॉडल के रेट-बेस्ड में कन्वर्ट करने के लिए आपको एक बुक रीप्लेनिशमेंट टाइम मानना होगा (BTCUSDT के लिए लगभग 10–60 सेकंड): दर पर ट्रेडिंग हर रीफ्रेश साइकल में कंज्यूम करती है, इसलिए । यही धारणा — तत्काल, पूर्ण रीप्लेनिशमेंट एक निश्चित घड़ी पर — वह दरार है जिसके ज़रिए Obizhaeva-Wang प्रवेश करता है; इस पर आगे और चर्चा। रूट B — पार्टिसिपेशन पर रियलाइज़्ड स्लिपेज को रिग्रेस करें। आक्रामक (टेकर) फ्लो को 1-मिनट बिन्स में बकेट करें; हर बिन के लिए, टेकर-साइड VWAP-माइनस-ओपन-मिड को टेकर वॉल्यूम रेट पर रिग्रेस करें। रूट B यह मापता है कि मार्केट ने वाकई अग्रेसर्स से क्या चार्ज किया; रूट A यह मापता है कि रेस्टिंग बुक अभी क्या चार्ज करेगी। जब ये दोनों 3 के फैक्टर से असहमत हों, तो लेवल के लिए B पर और इंट्राडे शेप के लिए A पर भरोसा करें।
: Kyle-स्टाइल रिग्रेशन से परमानेंट इम्पैक्ट
मिड-प्राइस चेंजेस को 5-मिनट विंडोज़ में सिग्नड नेट टेकर फ्लो पर रिग्रेस करें:
फिर चेक करें कि एक विंडो बाद इम्पैक्ट रिवर्ट नहीं हुआ है — नॉन-रिवर्टिंग कॉम्पोनेंट आपकी ट्रेडिंग टाइमस्केल पर "परमानेंट" है। यह तीनों में से सबसे नॉइज़ी है, बड़े मार्जिन से।
काम करने वाला कोड, सिर्फ पब्लिक 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 पेज की जगह हिस्टोरिकल डंप्स के कुछ दिनों का डेटा लगाएं और रिग्रेशन को हज़ारों बिन्स पर चलाएं, मुट्ठी भर पर नहीं।
क्रिप्टो कैलिब्रेशन नॉइज़ी क्यों है, और इसके बारे में क्या करें
रिग्रेशन को असली डेटा पर चलाएं और आपको कुछ प्रतिशत का मिलेगा, और एक कोएफिशिएंट जो दिनों के बीच 2–5 के फैक्टर से इधर-उधर होता रहेगा। यह आपके कोड में बग नहीं है। वजहें स्ट्रक्चरल हैं:
- एंडोजेनिटी। फ्लो प्राइस पर उतना ही रिएक्ट करता है जितना प्राइस फ्लो पर। मोमेंटम ट्रेडर्स खरीदते हैं क्योंकि प्राइस बढ़ी; रिटर्न्स को फ्लो पर एक भोला-भाला OLS रिग्रेस करना उनकी प्रतिक्रिया पकड़ लेता है और उसे इम्पैक्ट मान लेता है। साफ फिक्स है अपनी खुद की फिल्स का इस्तेमाल करना (डिज़ाइन से एक्सोजेनस) — जो आपको तभी मिलेंगी जब आप कुछ समय ट्रेड कर चुके हों।
- कॉन्केविटी। असली इम्पैक्ट साइज़ में कॉन्केव होता है — एम्पिरिकली स्क्वेयर-रूट के करीब (Almgren, Thum, Hauptmann and Li, 2005, "Direct estimation of equity market impact" में लगभग 0.6 का एक्सपोनेंट पाया गया; यही कॉन्केविटी क्रिप्टो में भी मजबूती से दिखती है)। एक कॉन्केव फंक्शन में लाइन फिट करने का मतलब है कि आपके और सैंपल की साइज़ रेंज पर निर्भर करते हैं। उन्हीं पार्टिसिपेशन रेट्स पर कैलिब्रेट करें जिन पर आप वाकई ट्रेड करेंगे।
- फ्रैगमेंटेशन और डेरिवेटिव लीडरशिप। Binance पर BTCUSDT स्पॉट कई वेन्यूज़ में से एक है, और प्राइस डिस्कवरी अक्सर पर्प्स पर होती है। वह फ्लो जो आप कभी नहीं देखते, उस प्राइस को हिलाता है जिस पर आप रिग्रेस कर रहे हैं, जिससे नॉइज़ टर्म बढ़ जाता है।
- रीजिम डिपेंडेंस। एशिया सेशन में मापा गया US ओपन का वर्णन नहीं करता; जब वोलैटिलिटी दोगुनी होती है तो इम्पैक्ट लगभग दोगुना हो जाता है। सेशन के हिसाब से कैलिब्रेट करें, और कम से कम साप्ताहिक रूप से फिर से फिट करें।
राहत की बात: ट्रैजेक्टरी क्षमाशील है। , इसलिए में 2 के फैक्टर की गलती को केवल से हिलाती है, और कॉस्ट फंक्शन ऑप्टिमम के पास फ्लैट होता है। को 2 के फैक्टर के भीतर सही पाना और को एक ऑर्डर-ऑफ-मैग्नीट्यूड के भीतर सही पाना ही TWAP के मुकाबले उपलब्ध ज्यादातर सुधार को कैप्चर कर लेता है। प्रिसिज़न प्री-ट्रेड कॉस्ट एस्टिमेट्स के लिए मायने रखती है; शेड्यूलिंग के लिए रोबस्टनेस काफी है।
मॉडल कहां टूटता है, और वे पेपर्स जो इसे ठीक करते हैं
Almgren-Chriss एक स्कैफोल्ड है, और यह जानना कि कौन सा बीम लोड-बेयरिंग है, आपको बताता है कि किस एक्सटेंशन तक पहुंचना है।
नॉनलीनियर इम्पैक्ट — Almgren (2003)। "Optimal execution with nonlinear impact functions and trading-enhanced risk" (Applied Mathematical Finance 10, 1–18) पावर-लॉ टेम्परेरी इम्पैक्ट के साथ पूरे प्रोग्राम को फिर से करता है। एम्पिरिकली पसंदीदा — स्क्वेयर-रूट लॉ — के लिए, ऑप्टिमल ट्रैजेक्टरीज़ का करैक्टर बदल जाता है: कॉन्केव इम्पैक्ट लीनियर इम्पैक्ट के मुकाबले बर्स्ट्स को कम सज़ा देता है, तो उसी पर ऑप्टिमल शेड्यूल्स ज्यादा फ्रंट-लोडेड हो जाते हैं। क्वालिटेटिव स्ट्रक्चर (अर्जेंसी पैरामीटर, एफिशिएंट फ्रंटियर) बची रहती है; sinh फॉर्मूला नहीं बचता।
रेजिलिएंस और LOB — Obizhaeva and Wang (2013)। "Optimal trading strategy and supply/demand dynamics" (Journal of Financial Markets 16(1), 1–32; वर्किंग पेपर 2005 से सर्कुलेट हो रहा था) टेम्परेरी/परमानेंट के द्वैत को एक लिमिट ऑर्डर बुक से बदल देता है जिसकी फाइनाइट डेप्थ और एक्सपोनेंशियली डिकेइंग इम्पैक्ट होता है: आपका ट्रेड बुक को खा जाता है, और बुक रेजिलिएंस रेट पर फिर से भरती है। AC की "टेम्परेरी इम्पैक्ट तुरंत गायब हो जाता है" वाली धारणा की लिमिट है। ऑप्टिमल स्ट्रैटेजी का शेप नाटकीय रूप से बदल जाता है: शुरुआत में एक ब्लॉक ट्रेड, अंत में एक ब्लॉक, और बीच में एक कॉन्स्टेंट ट्रेडिंग रेट — ये ब्लॉक्स बुक की रिकवरी का फायदा उठाते हैं। अगर आपका चाइल्ड-ऑर्डर इंटरवल वेन्यू के रीप्लेनिशमेंट टाइम के बराबर है (क्रिप्टो में, सेकंड से एक मिनट तक — अक्सर ऐसा ही होता है), तो आप Obizhaeva-Wang के क्षेत्र में हैं, Almgren-Chriss के क्षेत्र में नहीं, और ऊपर के कैलिब्रेशन में का फज ही आपकी चेतावनी है।
नो-डायनामिक-आर्बिट्रेज — Gatheral (2010)। "No-dynamic-arbitrage and market impact" (Quantitative Finance 10(7), 749–759) यह सवाल पूछता है कि इंस्टेंटेनियस इम्पैक्ट फंक्शन और डिके कर्नल के कौन से कॉम्बिनेशन आंतरिक रूप से संगत हैं, यानी नेगेटिव एक्सपेक्टेड कॉस्ट वाली किसी राउंड-ट्रिप स्ट्रैटेजी की अनुमति नहीं देते। नतीजे तीखे हैं: एक्सपोनेंशियल डिके केवल लीनियर इम्पैक्ट के साथ संगत है — एक्सपोनेंशियल डिके को स्क्वेयर-रूट इम्पैक्ट के साथ मिलाइए और मॉडल को एक ऑसिलेटिंग ट्रेड सीक्वेंस से पैसे के लिए पंप किया जा सकता है; नॉनलीनियर इम्पैक्ट को पावर-लॉ डिके की जरूरत होती है, जिसमें दोनों एक्सपोनेंट्स को जोड़ने वाली एक इनइक्वालिटी होती है (इम्पैक्ट और डिके के लिए, मोटे तौर पर )। यह वह पेपर है जिसे अपने इम्पैक्ट मॉडल पर कोई फैंसी डिके कर्नल जड़ने से पहले पढ़ लेना चाहिए: ज्यादातर ऐड-हॉक कॉम्बिनेशन गुपचुप तरीके से आर्बिट्रेजेबल होते हैं, जिसका प्रैक्टिकल मतलब है कि आपका ऑप्टिमाइज़र वह आर्बिट्रेज खोज निकालेगा और बेतुके ऑसिलेटिंग शेड्यूल्स प्रोड्यूस करेगा। अगर आपकी "ऑप्टिमल" ट्रैजेक्टरी एक शुद्ध लिक्विडेशन के दौरान खरीद और बिक्री के बीच अदल-बदल करती है, तो आपने Gatheral का उल्लंघन किया है, अल्फा नहीं खोजा है।
ML सीक्वल्स। इस सीरीज़ में दो थ्रेड्स सीधे इसी स्कैफोल्ड पर बनते हैं। पहला, रीइन्फोर्समेंट-लर्निंग एक्जीक्यूशन: एक बार जब आप मान लेते हैं कि इम्पैक्ट नॉनलीनियर, स्टेट-डिपेंडेंट, और आंशिक रूप से अनऑब्ज़र्वेबल है, तो क्लोज्ड फॉर्म खत्म हो जाता है, और RL (Nevmyvaka, Feng and Kearns के 2006 के Q-learning पेपर से आगे) ट्रैजेक्टरी स्पेस को खोजने का एक स्वाभाविक तरीका है — लेकिन हर गंभीर RL एक्जीक्यूशन एजेंट को AC सॉल्यूशन के मुकाबले बेंचमार्क किया जाता है, और अक्सर उसी से इनिशियलाइज़ किया जाता है। दूसरा, न्यूरल प्राइस-इम्पैक्ट मॉडल्स: को ऑर्डर बुक स्टेट के एक सीखे हुए फंक्शनल से बदलना, जबकि ऊपर मीन-वेरिएंस शेड्यूलिंग लॉजिक को बनाए रखना। इनमें से कोई भी सीक्वल यह जाने बिना मायने नहीं रखता कि लीनियर-गॉसियन बेसलाइन वास्तव में क्या है और इसका फॉर्म ऐसा क्यों है।
क्या सीखकर ले जाएं
मॉडल तीन धारणाएं, एक डिफरेंस इक्वेशन, और एक नंबर है। लीनियर परमानेंट इम्पैक्ट (नो-मैनिपुलेशन द्वारा मजबूर), लीनियर टेम्परेरी इम्पैक्ट (एक अप्रॉक्सिमेशन जिसके इर्द-गिर्द आप कैलिब्रेट करते हैं), एरिथमेटिक ब्राउनियन नॉइज़। ऑप्टिमम इन्वेंटरी वेरिएंस को इम्पैक्ट कॉस्ट के मुकाबले ट्रेड-ऑफ करता है, पूरी स्ट्रैटेजी अर्जेंसी में सिमट जाती है, और TWAP के डिजेनरेट केस के रूप में निकल आता है — जो मॉडल में सबसे उपयोगी तथ्य है, क्योंकि यह "क्या हमें इसे TWAP करना चाहिए?" को आदत के मामले से बदलकर रिस्क एवर्जन के बारे में एक जांचने योग्य दावे में बदल देता है। कैलिब्रेशन असली काम है: आसान है, 2 के फैक्टर का खेल है, एक रिसर्च प्रोजेक्ट है, और ट्रैजेक्टरी तीनों को माफ कर देती है। इसे एक दोपहर में इम्प्लीमेंट करें; बाकी महीना रिग्रेशन डायग्नोस्टिक्स पर खर्च करें।
संदर्भ
- 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.
Authors
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.