ओपन सोर्स क्वांट ट्रेडिंग पुस्तक से सीखें
ओपन सोर्स क्वांट ट्रेडिंग पुस्तक का पूरा पाठ्यक्रम देखें: डेटा से लाइव ऑर्डर तक हर चरण, शुरुआती लोगों की आम रुकावटें और US stocks में काम आने वाले हिस्से।
ओपन सोर्स क्वांट ट्रेडिंग पुस्तक एक निःशुल्क सार्वजनिक पाठ्यक्रम है। इसमें कच्चे डेटा से लेकर लाइव ऑर्डर तक की पूरी प्रक्रिया लिखी गई है। क्रम वही है, जिससे एक शुरुआती व्यक्ति आम तौर पर गुजरता है। xingwudao द्वारा GitHub पर प्रकाशित XQuant: Everyone Can Be a Quantitative Trader की पांडुलिपि इसका स्पष्ट उदाहरण है। अगस्त 2026 तक इसे 686 stars मिले हैं। इसके नौ अध्याय लगभग हर क्वांट पाठ्यक्रम में शामिल पूरी प्रक्रिया को क्रमवार प्रस्तुत करते हैं। यह पेज उसी प्रक्रिया को चरण-दर-चरण देखता है। इसमें हर चरण से जुड़ी विशिष्ट विफलता बताई गई है। साथ ही, यह भी बताया गया है कि Chinese A shares से US equities तक जाने पर कौन-से हिस्से उपयोगी बने रहते हैं।
एक ओपन सोर्स क्वांट ट्रेडिंग पुस्तक में क्या होता है?
किसी भी शुरुआती पाठ्यक्रम से ब्रांडिंग हटा दें, तो पाँच चरण बचते हैं। क्रम यह होता है: डेटा हासिल करना और साफ करना, उससे एक सिग्नल बनाना, उस सिग्नल को ऐतिहासिक डेटा पर परखना, दाँव का आकार तय करना, फिर ऑर्डर भेजना और लागत चुकाना। 016b66e कमिट पर 14 जुलाई 2026 को पढ़ी गई XQuant की विषय-सूची नौ अध्यायों में यही प्रक्रिया प्रस्तुत करती है।
- तैयारी, फिर अध्याय एक: एक पूरी रणनीति को शुरू से अंत तक चलाना।
- अध्याय दो, क्या खरीदना है: तीन ETF से शुरुआत।
- अध्याय तीन, कितना खरीदना है: आवंटन की तीन विधियाँ और उनकी आपस में तुलना।
- अध्याय चार, कब ट्रेड करना है: रीबैलेंसिंग, स्टॉप लॉस, टेक प्रॉफिट।
- अध्याय पाँच, यह तय करना कि रणनीति अच्छी है या नहीं: चार दृष्टिकोण।
- अध्याय छह, जल्दी जश्न न मनाएँ: ओवरफिटिंग से बचाव।
- अध्याय सात, आदर्श से वास्तविकता तक: ट्रेड निष्पादित करना।
- अध्याय आठ, लॉन्च के बाद का जीवन: निगरानी, निदान और पुनरावृत्ति।
- अध्याय नौ, नए अवसर खोजना: फैक्टर रिसर्च का परिचय।
इस क्रम पर ध्यान देना चाहिए। पोज़िशन साइजिंग अध्याय तीन में आती है, दोनों बैकटेस्ट अध्यायों से पहले, जबकि फैक्टर रिसर्च सबसे अंत में आती है। स्वयं सीखने वाले रास्ते आमतौर पर इसके उलट होते हैं: पहले फैक्टर का विचार, दूसरे चरण में बैकटेस्ट और साइजिंग नियम कभी नहीं। सहायक अभ्यास रिपॉज़िटरी (उसी तारीख को 333 stars) तैयार कोड के बजाय लिखित कार्य-विनिर्देशों के आधार पर व्यवस्थित है। इसमें पाठक किसी AI assistant को उन्हें लागू करने का निर्देश देता है। नीचे आने वाली हर बात के लिए उस कोड को पढ़ना निर्णायक कौशल है जिसे आपने स्वयं नहीं लिखा, क्योंकि आगे आने वाली हर विफलता किसी न किसी implementation detail में छिपी होती है।
चरण एक: पहले डेटा प्राप्त करें, फिर यूनिवर्स परिभाषित करें
डेटा-कार्य का दिखाई देने वाला आधा हिस्सा सफाई है: गलत ट्रेड प्रिंट, अनुपलब्ध सत्र, और स्टॉक-स्प्लिट तथा लाभांश समायोजन। किन नामों का अध्ययन करना है, यह चुनना इसका अदृश्य आधा हिस्सा है। यहीं सर्वाइवरशिप बायस प्रवेश करता है, उससे पहले कि रणनीति कोड की एक भी पंक्ति लिखी जाए। जून के किसी एक सप्ताह के दौरान ट्रेड प्रिंट करने वाले हर US ticker को लें, हर वर्ष के लिए अलग-अलग, और पूछें कि
हर आंकड़े के पीछे का पूरा SQL
WITH june_week AS (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS year,
ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE toMonth(toTimeZone(window_start, 'America/New_York')) = 6
AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 10 AND 16
AND toYear(toTimeZone(window_start, 'America/New_York')) BETWEEN 2016 AND 2026
AND volume > 0
GROUP BY year, ticker
),
survivors AS (
SELECT ticker FROM june_week WHERE year = 2026
)
SELECT year,
uniqExact(ticker) AS tickers_traded,
uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors)) AS still_trading_2026,
round(100 * uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors))
/ uniqExact(ticker), 1) AS still_trading_pct
FROM june_week
GROUP BY year
ORDER BY yearमें से कितने 8224 के उसी सप्ताह में भी ट्रेड कर रहे थे।
2016 के उस सप्ताह में ट्रेड करने वाले 50% tickers में से 2026 उसी सप्ताह में भी ट्रेड कर रहे थे। बाकी कंपनियों का अधिग्रहण हुआ, उनका विलय हुआ, उनके नाम बदले गए या उन्हें delist कर दिया गया। आज की सूची से बनाया गया backtest केवल उन नामों का अध्ययन करता है जो टिके रहे। यह ऐसी कंपनियों को रखने के लिए रणनीति को श्रेय देता है, जिनका चयन बाद में किया गया था। शुरुआती उपयोगकर्ताओं के लिए उपलब्ध feed आपको बिना किसी चेतावनी के यही survivor list देगी: मुफ्त stock market data API गाइड में बताया गया है कि ऐसे feed में कौन-सा डेटा होता है और कौन-सा नहीं।
चरण दो: डेटा को सिग्नल में बदलना
सिग्नल वह नियम है जो किसी समय-बिंदु पर किसी स्टॉक को स्कोर देता है। फैक्टर वह सिग्नल है जिसके बारे में आपको विश्वास होता है कि वह एक साथ कई स्टॉक्स पर लागू होता है। मोमेंटम, वैल्यू और कम अस्थिरता इसके पाठ्यपुस्तकीय उदाहरण हैं। इस चरण में सबसे बड़ी गलती तब तक नियमों का परीक्षण करते रहना है, जब तक कोई एक नियम काम करता हुआ न दिखे। किसी एक इंडेक्स के एक दशक के डेटा पर मूविंग-एवरेज क्रॉसओवर के twenty variants आज़माने पर हमेशा एक विजेता मिलेगा। वह विजेता वही होगा जो शोर के अनुरूप सबसे अच्छी तरह ढला हो। बचाव के उपाय आकर्षक नहीं हैं: नियम को मापने से पहले तय कर लें, इतिहास के एक हिस्से को अलग रखें और उसे कभी न देखें, आज़माए गए हर variant की गिनती रखें, और कम समायोज्य संख्याओं वाले नियमों को प्राथमिकता दें। XQuant फैक्टर रिसर्च से पहले इस विषय पर पूरा अध्याय देता है। यही सही क्रम है।
चरण तीन: बैकटेस्ट, जहाँ अधिकांश शुरुआती लोग रुक जाते हैं
यह वह चरण है जहाँ अधिकांश स्व-अध्ययन परियोजनाएँ समाप्त हो जाती हैं। वे चुपचाप समाप्त होती हैं और इक्विटी कर्व बहुत अच्छा दिखता है। ऊपर बताया गया सर्वाइवरशिप दो त्रुटियों में पहली है। लुक-अहेड बायस दूसरी है। इसमें रणनीति ऐसी संख्या का उपयोग करती है, जो ऑर्डर दिए जाने के समय तक उपलब्ध नहीं हुई थी। इसका सबसे सामान्य रूप आज के क्लोज़िंग प्राइस से निकाला गया नियम है, जिसे उसी क्लोज़िंग प्राइस पर भर दिया जाता है। इस धारणा से छूट जाने वाली दूरी को मापिए।
हर आंकड़े के पीछे का पूरा SQL
WITH sessions AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMin(open, window_start) AS session_open,
argMax(close, window_start) AS session_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'NVDA')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-08-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, session
),
gaps AS (
SELECT ticker,
session,
toFloat64(session_open) AS open_px,
toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
FROM sessions
)
SELECT formatDateTime(toStartOfMonth(session), '%Y-%m') AS month,
formatDateTimeInJodaSyntax(toStartOfMonth(session), 'MMMM yyyy') AS month_label,
round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'SPY'), 1) AS spy_gap_bps,
round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'NVDA'), 1) AS nvda_gap_bps
FROM gaps
WHERE prev_close > 0
GROUP BY month, month_label
HAVING countIf(ticker = 'SPY') > 0 AND countIf(ticker = 'NVDA') > 0
ORDER BY monthJuly 2026 में, एक क्लोज़ और अगले ओपनिंग प्रिंट के बीच की औसत दूरी SPY के लिए 40.8 बेसिस पॉइंट और NVDA के लिए 107.4 बेसिस पॉइंट थी। एक बेसिस पॉइंट, प्रतिशत बिंदु के एक सौवें हिस्से के बराबर होता है। August 2024 से शुरू होकर पैनल में शामिल सभी 24 महीने शून्य से ऊपर हैं। ऐसा बैकटेस्ट, जो क्लोज़ पर निर्णय लेता है और उसी क्लोज़ पर ऑर्डर भरता है, हर ट्रेड पर उस दूरी का लाभ बिना किसी लागत के लेता है। कोई भी लाइव ऑर्डर ऐसा नहीं कर सकता। बैकटेस्टिंग में लुक-अहेड बायस इस प्रक्रिया को विस्तार से समझाता है और शेयर रातोंरात गैप क्यों करते हैं स्वयं गैप की व्याख्या करता है।
चरण चार: कितना खरीदना है, यह तय करें
यहाँ समस्या किसी चीज़ के न होने की है। अधिकांश स्व-अध्ययन करने वाले ट्रेडर कभी पोज़िशन-साइज़िंग नियम नहीं लिखते। इसका अर्थ है कि उनका नियम संयोग से तय होता है। आमतौर पर वे हर नाम में समान राशि लगाते हैं या उपलब्ध नकदी के अनुसार खरीदते हैं। समान राशि का अर्थ समान जोखिम नहीं है।
हर आंकड़े के पीछे का पूरा SQL
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMax(close, window_start) AS session_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'KO', 'JNJ', 'MSFT', 'AAPL', 'NVDA', 'TSLA', 'COIN')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-08-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, session
),
rets AS (
SELECT ticker,
toFloat64(session_close) AS close_px,
toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
FROM daily
)
SELECT ticker,
round(stddevSamp(close_px / prev_close - 1) * sqrt(252) * 100, 1) AS annualized_vol_pct,
round(abs(min(close_px / prev_close - 1)) * 100, 2) AS worst_day_pct
FROM rets
WHERE prev_close > 0
GROUP BY ticker
ORDER BY annualized_vol_pct DESC31 जुलाई, 2026 को समाप्त होने वाले बारह महीनों में, COIN की वार्षिकीकृत अस्थिरता 68% रही। पैनल के अपेक्षाकृत शांत छोर पर SPY के लिए यह 12.7% थी। 13.34% का सबसे खराब एक-दिवसीय सत्र पिछले बंद भाव से 13.34% नीचे बंद हुआ, जबकि SPY में सबसे खराब दिन 2.69% रहा। प्रत्येक नाम में समान राशि लगाने से दैनिक उतार-चढ़ाव बहुत अलग हो सकते हैं। शुरुआती ट्रेडर वास्तव में सिग्नल नहीं, बल्कि इसी उतार-चढ़ाव का अनुभव करता है। Kelly criterion के अनुसार पोज़िशन साइज़िंग एक औपचारिक उत्तर प्रस्तुत करता है, जबकि कंसंट्रेशन रिस्क अनौपचारिक उत्तर का स्वरूप दिखाता है।
चरण पाँच: निष्पादन और वे लागतें जिन्हें बैकटेस्ट भूल जाता है
दो लागतें होती हैं, लेकिन केवल एक दिखाई देती है। कमीशन और नियामकीय शुल्क विवरण में दिखाई देते हैं। स्लिपेज दिखाई नहीं देता। यह स्क्रीन पर दिखने वाली कीमत और आपको मिलने वाली कीमत के बीच का अंतर है। इसकी न्यूनतम सीमा bid-ask spread है। यह उस क्षण के सर्वोत्तम खरीद और सर्वोत्तम बिक्री भावों के बीच का अंतर होता है। खरीदार ask पर भुगतान करते हैं और विक्रेता bid पर सौदा करते हैं। इसलिए एक पूर्ण खरीद-बिक्री चक्र में spread दो बार पार होता है। spread स्थिर नहीं होता।
हर आंकड़े के पीछे का पूरा SQL
WITH quotes AS (
SELECT ticker,
toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE) AS bucket,
toFloat64(ask_price - bid_price) / toFloat64((ask_price + bid_price) / 2) * 10000 AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AAPL', 'KO')
AND sip_timestamp >= toDateTime('2026-07-17 13:00:00')
AND sip_timestamp < toDateTime('2026-07-17 21:00:00')
AND bid_price > 0
AND ask_price > bid_price
)
SELECT formatDateTime(bucket, '%H:%i') AS et_time,
round(avgIf(spread_bps, ticker = 'AAPL'), 2) AS aapl_spread_bps,
round(avgIf(spread_bps, ticker = 'KO'), 2) AS ko_spread_bps
FROM quotes
WHERE spread_bps > 0 AND spread_bps < 500
GROUP BY et_time
HAVING countIf(ticker = 'AAPL') > 0 AND countIf(ticker = 'KO') > 0
ORDER BY et_timeपैनल एक शुक्रवार के 16 आधे-घंटे के खंडों को दिखाता है। इसमें शुरुआती घंटी बजने से पहले वाला 09:00 खंड और बाजार बंद होने के बाद वाला 16:30 खंड शामिल है। पहले खंड में AAPL का quoted spread 10.53 basis points था और अंतिम खंड में 3.27। KO के लिए ये आंकड़े क्रमशः 28.87 और 8.04 थे। दिन के सबसे संकरे quotes चार्ट के मध्य में, इन दोनों छोरों के बीच दिखाई देते हैं। बाजार के दो सबसे अधिक liquid नामों में opening पर कारोबार करने वाली रणनीति की लागत, उसी रणनीति के midday संस्करण से अलग होती है। zero-cost assumption वाला बैकटेस्ट इनमें से किसी भी लागत को सही ढंग से नहीं दर्शाता। bid-ask spread यह संख्या निर्धारित करता है, opening पर spreads क्यों बढ़ते हैं इस curve को समझाता है, और किसी stock में कारोबार करने की लागत एक पूर्ण खरीद-बिक्री चक्र की कुल लागत बताता है। साफ बैकटेस्ट और वास्तविक धन के बीच एक और चरण होता है: वास्तविक धन लगाने से पहले paper trading।
A share के पाठ्यक्रम के कौन-से हिस्से US stocks पर लागू होते हैं?
XQuant और इसके समकक्ष Chinese A shares और ETFs के लिए लिखे गए हैं। यह पद्धति मूल रूप से लागू रहती है: चरणों का क्रम, परिभाषाएँ, overfitting पर नियंत्रण, लागत को बाद में जोड़ने के बजाय अलग line item के रूप में लिखने की आदत, और position sizing की गणना का हर हिस्सा। Price bars, price bars ही रहते हैं। जो चीज़ लागू नहीं होती, वह इनके आसपास के नियम हैं।
- A shares में वास्तविक T+1 प्रतिबंध है: आज खरीदे गए stock को अगले trading session से पहले बेचा नहीं जा सकता। US T+1 settlement convention है और intraday trading को नहीं रोकता। हालांकि, pattern day trader rule $25,000 से कम वाले margin accounts को पाँच business days में तीन day trades तक सीमित करता है।
- Main-board A shares में दैनिक price move 10% तक सीमित रहता है। Growth boards में यह सीमा 20% है। US stocks में दैनिक सीमा नहीं होती। इसके बजाय trading pauses volatility bands और news halts के कारण आते हैं।
- A share orders 100 shares के lots में trade होते हैं। कई US brokers fractional shares भरते हैं। इससे यह बदल जाता है कि sizing rule वास्तव में क्या व्यक्त कर सकता है।
- China में sell side पर stamp duty लगती है। US sellers अलग आकार और स्वरूप वाली छोटी regulatory fees चुकाते हैं।
- Session structure अलग है। इसमें Shanghai और Shenzhen में midday break भी शामिल है। US stock market hours लगातार चलते हैं और closing auction पर समाप्त होते हैं।
किसी course से अपनी code में कॉपी किया गया कोई भी cost या timing constant, पहले live order के साथ सामने आने वाली bug है।
README नहीं, संदर्भ को स्थिर करें
अगस्त 2026 तक रिपॉज़िटरी में कोई टैग किए गए रिलीज़ नहीं हैं, इसलिए टिकाऊ संदर्भ एक कमिट है: 016b66e, जिसकी तारीख 14 जुलाई 2026 है। अभी लिखी जा रही पुस्तक के लिए यह महत्वपूर्ण है। अध्यायों की संख्याएँ बदलती हैं, README फ़ाइलें दोबारा लिखी जाती हैं, शीर्षक स्थान बदलते हैं, और अध्याय सात पर ले जाने वाला लिंक चुपचाप किसी और सामग्री पर ले जाने लगता है। कमिट और तारीख का संदर्भ दें, अध्याय संख्या के बजाय पढ़े गए अध्याय का शीर्षक दर्ज करें, और आपके नोट्स एक वर्ष बाद भी जाँचे जा सकेंगे। पांडुलिपि CC BY-NC-SA 4.0 के तहत प्रकाशित है, जबकि बिल्ड स्क्रिप्ट MIT लाइसेंस के तहत हैं। यही अनुशासन स्वयं पाठ्यक्रम का अंतिम पाठ भी है: जिस रणनीति को पिन किए गए डेटा स्नैपशॉट से दोबारा चलाया नहीं जा सकता, वह परिणाम नहीं, केवल एक कहानी है।
अक्सर पूछे जाने वाले प्रश्न
क्या आप किसी निःशुल्क ओपन सोर्स पुस्तक से क्वांट ट्रेडिंग सीख सकते हैं?
बुनियादी रूपरेखा के लिए, हाँ। ओपन मैन्युस्क्रिप्ट से आप हर दावे की उसके मूल स्रोत से जाँच कर सकते हैं। लेकिन पुस्तक आपके अपने बाजार का डेटा, लागत और नियम उपलब्ध नहीं करा सकती। इसी कारण किसी एक एक्सचेंज के लिए तैयार किया गया पाठ्यक्रम आपके ब्रोकर से मेल खाना बंद कर देता है।
क्वांट पाठ्यक्रम का कौन-सा चरण अधिकांश शुरुआती लोगों को रोक देता है?
बैकटेस्ट। वहाँ दो त्रुटियाँ होती हैं और दोनों परिणाम को बेहतर दिखाती हैं: सर्वाइवरशिप बायस, जो बाद में तैयार किए गए यूनिवर्स से आता है, और लुक-अहेड बायस, जो उस कीमत पर भराव से आता है जिसे घड़ी ने अभी प्रिंट ही नहीं किया था। 50% के केवल टिकर ही 2016 के उस जून सप्ताह में कारोबार कर रहे थे और उसके एक दशक बाद भी कारोबार कर रहे थे।
सर्वाइवरशिप बायस और लुक-अहेड बायस में क्या अंतर है?
सर्वाइवरशिप बायस यूनिवर्स की समस्या है: परीक्षण में शामिल नामों का चयन इसलिए किया गया था क्योंकि वे टिके रहे। लुक-अहेड बायस समय-निर्धारण की समस्या है: रणनीति ऐसी संख्या का उपयोग करती है जो उस समय उपलब्ध नहीं थी, जब ऑर्डर दिया जाना था। पहला सूची को बढ़ा-चढ़ाकर दिखाता है, जबकि दूसरा निष्पादन मूल्य को बढ़ा-चढ़ाकर दिखाता है।
क्या चीनी A शेयर का क्वांट कोर्स US stocks के लिए काम करता है?
पद्धति काम करती है। बाजार के नियम नहीं। चरणों का क्रम, ओवरफिटिंग पर अनुशासन और लागत का लेखांकन बनाए रखें। इसके बाद, किसी भी राशि का निवेश करने से पहले डेटा व्यवस्था, T+1 बिक्री प्रतिबंध, दैनिक मूल्य सीमाएँ और लॉट साइज को US के समकक्ष नियमों से बदलें।
ऊपर का हर पैनल एक stored query है, जिसके नीचे उसका SQL दिया गया है। किसी एक को खोलें, टिकर या तारीखें बदलें और Strasmore terminal पर स्वयं चलाएँ।