Strasmore Research
सीखें Matt Connorलेखक: Matt Connor

सेल्फ-होस्टेड A-share क्वांट वर्कबेंच कैसे काम करता है

सेल्फ-होस्टेड A-share क्वांट वर्कबेंच आपके कंप्यूटर पर बाजार की स्क्रीनिंग और बैकटेस्टिंग की सुविधा देता है। यह किन चीजों पर निर्भर करता है और शुरुआत में किन चार बातों की जांच करें।

08:00
सेल्फ-होस्टेड A-share क्वांट वर्कबेंच एक ऐसा वेब पेज है जो बाजार को स्क्रीन करता है, चुनिंदा नामों पर नज़र रखता है, बैकटेस्ट चलाता है और पोस्ट-मार्केट समीक्षा लिखता है। यह सब आपके नियंत्रण वाले मशीन पर होता है, न कि किसी ब्रोकर के टर्मिनल पर। MIT-लाइसेंस प्राप्त एक प्रोजेक्ट, tickflow-stock-panel, इन सभी सुविधाओं को एक सिंगल पोर्ट के पीछे पैक करता है। अगस्त 2026 तक इसे लगभग दो हजार आठ सौ GitHub स्टार्स मिल चुके थे।

फीचर लिस्ट को पढ़ना आसान है। इसके नीचे की परत यह तय करती है कि क्या अगली तिमाही में भी इनमें से कुछ काम करेगा या नहीं।

सेल्फ-होस्टेड A-share क्वांट वर्कबेंच की संरचना

इसकी आर्किटेक्चर इतनी सरल है कि इसे आसानी से समझा जा सकता है। अगस्त 2026 के कमिट के कोड और दस्तावेज़ों के अनुसार, इसमें निम्नलिखित शामिल हैं:

  • React और TypeScript में बना एक वेब पेज।
  • एक Python सर्विस, FastAPI, जिसमें एक शेड्यूलर है जो टाइमर पर डेटा रिफ्रेश करता है।
  • एक लोकल स्टोर: डिस्क पर Parquet फाइलें, जिन्हें DuckDB के साथ क्वेरी किया जाता है और Polars के साथ प्रोसेस किया जाता है।
  • एक बैकटेस्टिंग इंजन, vectorbt, जो उन फाइलों पर आधारित है।
  • एक वेंडर SDK जो पैनल द्वारा प्रदर्शित प्रत्येक मूल्य को फेच करता है।

ध्यान दें कि इसमें क्या अनुपस्थित है। इस स्टैक में कोई भी चीज़ एक्सचेंज से सीधे नहीं जुड़ती है। पैनल गणना करता है; वेंडर डेटा प्रदान करता है। "सेल्फ-होस्टेड" शब्द यह बताता है कि कोड कहाँ चलता है, न कि यह कि आंकड़े कहाँ से आते हैं। रॉ बार्स (raw bars) का स्वामित्व नीचे की लेयर का काम है, जो एक लोकल A-share मार्केट डेटा लेक है, और यही वह चीज़ है जो इसके ऊपर की हर चीज़ को रिप्लेसेबल बनाती है।

डेटा स्रोत का फ्री टियर क्या कवर करता है

एक एनवायरनमेंट वेरिएबल यह तय करता है कि पैनल क्या देख सकता है। वेंडर की (vendor key) को खाली छोड़ दें, तो प्रोजेक्ट उस मोड में चलता है जिसे इसके डॉक्स 'None' मोड कहते हैं: इसमें फ्री एंडपॉइंट से ऐतिहासिक डेली बार्स मिलते हैं, और मौजूदा सत्र का डेटा बाजार बंद होने के एक से दो घंटे बाद आता है। की (key) भरने पर पेड टियर के अनुसार एक्सेस खुल जाता है। यह एंड-ऑफ-डे (EOD) काम के लिए एक उपयोगी फ्री टियर है, लेकिन इंट्राडे के लिए यह एक सख्त सीमा है, और इसकी शर्तें वेंडर किसी भी रिन्यूअल पर बदल सकता है।

मेंटेनर इस व्यवस्था के बारे में स्पष्ट है:

यह प्रोजेक्ट केवल अध्ययन और क्वांटिटेटिव रिसर्च के लिए है, यह किसी भी प्रकार की निवेश सलाह नहीं है। बैकटेस्ट के परिणाम भविष्य के रिटर्न का प्रतिनिधित्व नहीं करते हैं।
यह प्रोजेक्ट व्यक्तिगत ओपन-सोर्स है, जो TickFlow डेटा स्रोत पर आधारित है, न कि कोई आधिकारिक TickFlow प्रोजेक्ट।
README, shy3130/tickflow-stock-panel, 13 अगस्त 2026 को पढ़ा गया

अंग्रेजी में इसका अर्थ है: यह प्रोजेक्ट अध्ययन और क्वांटिटेटिव रिसर्च के लिए है, यह "निवेश सलाह नहीं देता", बैकटेस्ट के परिणाम भविष्य के रिटर्न की गारंटी नहीं हैं, और यह "एक ओपन-सोर्स व्यक्तिगत प्रोजेक्ट है, न कि आधिकारिक TickFlow उत्पाद"। इस पूरी श्रेणी का यही स्थायी सबक है। Zero-ops आपके डेस्क से ऑपरेशंस का काम हटा देता है। लेकिन यह निर्भरता को वहीं छोड़ देता है जहाँ वह थी: आप एक ऐसी कंपनी से डेटा किराए पर ले रहे हैं जिसने कभी इस पैनल को सपोर्ट करने के लिए सहमति नहीं दी थी। README उपयोग को केवल अध्ययन और रिसर्च तक सीमित करता है, जबकि लाइसेंस फाइल MIT है।

वर्जन नंबर के बजाय कमिट SHA को पिन क्यों करें

कमिट SHA वह चालीस-अक्षरों का फिंगरप्रिंट है जिसे git हर सहेजे गए बदलाव को आवंटित करता है। यह कोड की एक सटीक स्थिति को स्थायी रूप से नाम देता है।

तेरह अगस्त दो हज़ार छब्बीस को पढ़े जाने पर, रिपॉजिटरी के GitHub Releases पेज पर कुछ भी नहीं था। इसमें इकतीस वर्जन टैग मौजूद हैं, v0.1.31 से v0.1.88 तक, जिनमें नंबरिंग में अंतराल है और कोई नोट संलग्न नहीं है। सबसे नया टैग इकतीस जुलाई दो हज़ार छब्बीस की एक कमिट की ओर इशारा करता था, जबकि डिफ़ॉल्ट ब्रांच छह अगस्त दो हज़ार छब्बीस के काम पर आगे बढ़ चुकी थी। एक टैग जो ब्रांच से पीछे है और जिसमें कोई नोट नहीं है, वह आपको यह नहीं बता सकता कि आप क्या प्राप्त कर रहे हैं।

इसलिए SHA को लिख लें। छह अगस्त दो हज़ार छब्बीस को डिफ़ॉल्ट ब्रांच का हेड ecfddb451e97f6fc9a7e43ac33e4ef0e69933b33 था। उस कमिट को चेक आउट करें और बैकटेस्ट से निकाले गए किसी भी निष्कर्ष के साथ उसे रिकॉर्ड करें। छह सप्ताह बाद, "मैंने नवीनतम चलाया" कहने का कोई अर्थ नहीं रह जाता।

प्रलेखित शुरुआत दो पंक्तियों की है: उदाहरण एनवायरनमेंट फ़ाइल को .env पर कॉपी करें, फिर docker compose up --build चलाएं, जो पैनल को पोर्ट 3018 पर सर्व करता है। ये उस कमिट पर मेंटेनर के निर्देश हैं, न कि कोई परखा हुआ रास्ता; बिल्ड इमेज को पुल करता है और उसे नेटवर्क एक्सेस की आवश्यकता होती है जिसका इस पेज ने परीक्षण नहीं किया है। डेवलपमेंट रूट (./dev.sh, या विंडोज़ पर .\dev.ps1) के लिए Python 3.11 या नया, Node 20 या नया, और uv तथा pnpm पैकेज मैनेजर की आवश्यकता होती है।

LLM रणनीति फीचर क्या भेजता है और कहाँ भेजता है

रणनीति निर्माण, सिंगल-स्टॉक कमेंट्री और समीक्षा लेखन वैकल्पिक हैं। AI_API_KEY को खाली छोड़ दें और पूरा इंटरफ़ेस निष्क्रिय रहेगा। इसे भरें और आप AI_PROVIDER (एक OpenAI-संगत एंडपॉइंट, या Ollama), AI_BASE_URL, AI_MODEL और AI_DAILY_TOKEN_BUDGET को भी सेट करते हैं, जो दिन का टोकन कोटा समाप्त होने पर कॉल को रोक देता है।

डेटा का प्रवाह महत्वपूर्ण है। आपका प्रॉम्प्ट, और पैनल जो भी संदर्भ उससे जोड़ता है, वह आपके द्वारा कॉन्फ़िगर किए गए एंडपॉइंट के लिए आपकी मशीन से बाहर निकल जाता है। बेस URL को किसी होस्ट किए गए API पर पॉइंट करें और अनुरोध उस कंपनी के पास जाता है; इसे अपने स्वयं के नेटवर्क पर रनटाइम पर पॉइंट करें और यह आपके पास ही रहता है। पैनल को सेल्फ-होस्ट करने का मतलब मॉडल को सेल्फ-होस्ट करना नहीं है। कुंजियाँ प्रोजेक्ट रूट में एक प्लेनटेक्स्ट .env में रहती हैं और इन्हें सेटिंग्स पेज से भी संपादित किया जा सकता है, जो कम से कम छह-अक्षर वाले डैशबोर्ड पासवर्ड के पीछे सुरक्षित होता है। LLM-जनरेटेड अल्फा फैक्टर्स पर हमारा नोट उन क्षेत्रों को कवर करता है जहाँ मशीन द्वारा लिखी गई रणनीतियाँ विफल हो सकती हैं।

क्या बैकटेस्टर ट्रेडिंग लागतों का मॉडल तैयार करता है?

बैकटेस्टर T+1 हैंडलिंग, कमीशन, स्लिपेज और स्टॉप-लॉस की सुविधा का दावा करता है। इन विकल्पों का मौजूद होना और इनका सक्रिय होना दो अलग बातें हैं। यदि कोई बैकटेस्ट प्रिंटेड क्लोजिंग प्राइस पर ट्रेड पूरा करता है और लागत को शून्य मानता है, तो यह दावा गलत है कि ट्रेडिंग मुफ्त है। ऐसा नहीं है। एक बेसिस पॉइंट एक प्रतिशत का सौवां हिस्सा होता है। नीचे दिया गया पैनल 17 जून 2026 को दोपहर के एक घंटे के दौरान छह अमेरिकी लिस्टिंग में सर्वश्रेष्ठ बिड और सर्वश्रेष्ठ ऑफर के बीच के औसत अंतर को बेसिस पॉइंट्स में मापता है।

क्वेरीस्प्रेड पार करने की लागत: औसत कोटेड स्प्रेड, छह US लिस्टिंग, 17 जून 2026 दोपहर
हर आंकड़े के पीछे का पूरा SQL
SELECT
    ticker                                                                       AS symbol,
    round(avg(toFloat64(ask_price) - toFloat64(bid_price))
          / avg((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, 2)   AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'F')
  AND sip_timestamp >= toDateTime('2026-06-17 15:00:00', 'UTC')
  AND sip_timestamp <  toDateTime('2026-06-17 16:00:00', 'UTC')
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY spread_bps
Run this yourself

पैनल में सबसे कम अंतर वाला नाम, SPY, ने उस घंटे के दौरान औसतन 0.29 bps का कोट दिया। सबसे अधिक अंतर वाला नाम, F, ने 6.98 bps का कोट दिया। इस अंतर को दो बार पार करें, एक बार प्रवेश करने के लिए और एक बार बाहर निकलने के लिए, तो कमीशन से पहले राउंड ट्रिप की लागत दिखाई गई संख्या से लगभग दोगुनी हो जाती है।

ट्रेडिंग का समय भी उतना ही मायने रखता है जितना कि उसका नाम। अगला पैनल उन लिस्टिंग में से एक को लेता है और मापता है कि उसकी कीमत एक मिनट के भीतर कितनी चली, जिसे उसी दिन के आधे घंटे के बकेट में औसत किया गया है।

क्वेरीएक मिनट के भीतर मूल्य में उतार-चढ़ाव: KO, न्यूयॉर्क समयानुसार, 17 जून 2026
हर आंकड़े के पीछे का पूरा SQL
SELECT
    formatDateTime(
        toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE),
        '%H:%i')                                                                 AS et_time,
    round(avg((toFloat64(high) - toFloat64(low)) / toFloat64(close)) * 10000, 1)  AS range_bps
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'KO'
  AND window_start >= toDateTime('2026-06-17 12:00:00', 'UTC')
  AND window_start <  toDateTime('2026-06-17 21:00:00', 'UTC')
  AND volume > 0
  AND close > 0
GROUP BY et_time
ORDER BY et_time
Run this yourself

पैनल 08:00 पर खुलता है, जो नियमित सत्र से पहले का समय है, जहां औसत मिनट बार ने 0 bps की चाल मापी: जो मिनट ट्रेड हुए, वे एक ही कीमत पर स्थिर रहे। अंतिम बकेट, 16:30, क्लोजिंग के बाद का है और इसका औसत 4.2 bps रहा। एक बैकटेस्ट इन श्रेणियों में से प्रत्येक से एक बिंदु चुनता है और उसे फिल (fill) कहता है। अंतिम बिंदुओं के बजाय कर्व को पढ़ें: यही धारणा कुछ घंटों में उदार होती है और कुछ में दंडात्मक। A-share नियम अपना अलग प्रभाव डालते हैं, क्योंकि T+1 के कारण आज खरीदे गए शेयर अगले सत्र तक बेचे नहीं जा सकते, और दैनिक मूल्य सीमाएं (price limits) मॉडल किए गए निकास (exit) को पूरी तरह से हटा सकती हैं। reproducible backtest का हमारा वॉकथ्रू दिखाता है कि एक तर्कसंगत सेटअप क्या रिकॉर्ड करता है, और look-ahead bias उन अन्य तरीकों को कवर करता है जिनसे एक साफ दिखने वाला कर्व गलत साबित हो सकता है।

समायोजित या गैर-समायोजित: स्रोत का प्रश्न

कॉर्पोरेट एक्शन वह जगह है जहाँ एक स्क्रीनर चुपचाप गलत जानकारी दे सकता है। एक शेयर जो दस-के-बदले-एक के अनुपात में स्प्लिट होता है, वह उस दिन नब्बे प्रतिशत की गिरावट दिखाता है, जबकि किसी का एक पैसा भी नुकसान नहीं होता। नीचे दी गई तालिका 1 जनवरी और 13 अगस्त 2026 के बीच अमेरिकी लिस्टिंग में हुए बारह सबसे बड़े फॉरवर्ड स्प्लिट्स की सूची है।

क्वेरीUS लिस्टिंग पर बारह सबसे बड़े फॉरवर्ड स्टॉक स्प्लिट, 1 जनवरी से 13 अगस्त 2026 तक
हर आंकड़े के पीछे का पूरा SQL
SELECT
    ticker                                                            AS symbol,
    formatDateTime(execution_date, '%b %e, %Y')                       AS effective_on,
    round(any(toFloat64(split_to)) / any(toFloat64(split_from)), 2)   AS shares_after_per_share
FROM global_markets.stocks_splits
WHERE execution_date >= toDate('2026-01-01')
  AND execution_date <= toDate('2026-08-13')
  AND split_from > 0
  AND split_to > split_from
  AND ticker NOT IN ('SPCX')
GROUP BY ticker, execution_date
ORDER BY shares_after_per_share DESC, execution_date DESC
LIMIT 12
Run this yourself

सबसे बड़ा स्प्लिट एक शेयर को 10000 में बदल देता है, जो Feb 10, 2026 से प्रभावी है। इस आकार के अनुपात सामान्य चार-के-बदले-एक वाले नहीं होते; एक कॉर्पोरेट-एक्शन फीड एक ही कॉलम में पूरी रेंज को शामिल करती है। इन बारह में से सबसे छोटा स्प्लिट भी एक शेयर को 20 में बदल देता है, जो एक गैर-समायोजित चार्ट को गिरावट जैसा दिखाने के लिए पर्याप्त है। कच्चे मूल्यों (raw prices) को पढ़ने वाला मोमेंटम स्क्रीन इनमें से प्रत्येक को क्रैश के रूप में चिह्नित करता है। चीनी फीड्स में भी यही समस्या उनके अपने शब्दावली में मौजूद है, जो हर सीरीज के तीन प्रकार भेजते हैं: गैर-समायोजित, फॉरवर्ड-समायोजित और बैक-समायोजित। यह सुनिश्चित करें कि आपके पैनल ने कौन सा डेटा लोड किया है। स्प्लिट-समायोजित मूल्य इतिहास गणना की प्रक्रिया को विस्तार से समझाता है।

इस तरह की किसी भी चीज़ को स्वयं होस्ट करने से पहले क्या जांचें

  • डेटा का स्रोत। यह जांचें कि वेंडर कौन है, लाइसेंस क्या है, और क्या फ्री टियर आपके इच्छित उपयोग को कवर करता है।
  • की (key) हैंडलिंग। यह देखें कि API keys डिस्क पर कहाँ सेव होती हैं, सेटिंग्स पेज तक किसकी पहुंच है, और क्या मशीन आपके अपने नेटवर्क के बाहर एक्सपोज़्ड है।
  • लागत का मॉडल। यह जांचें कि क्या बैकटेस्टर में कमीशन, स्लिपेज और बाजार के अपने नियम शामिल हैं, और यदि आप उन फील्ड्स को खाली छोड़ते हैं तो उनमें क्या वैल्यू रहती है।
  • अपडेट पाथ। आपने जो सटीक कमिट डिप्लॉय किया है, उसे अपने परिणामों के साथ लिखें, ताकि महीनों बाद भी उसे दोबारा दोहराया जा सके।

अक्सर पूछे जाने वाले प्रश्न

क्या सेल्फ-होस्टेड A-share क्वांट वर्कबेंच चलाने के लिए मुफ्त है?

कोड MIT-लाइसेंस प्राप्त और मुफ्त है। डेटा एक अलग विषय है: यदि वेंडर की (vendor key) खाली छोड़ दी जाए, तो यह प्रोजेक्ट मुफ्त ऐतिहासिक दैनिक बार्स (historical daily bars) पर निर्भर करता है, जिसमें वर्तमान सत्र का डेटा बाजार बंद होने के एक से दो घंटे बाद आता है। इससे तेज़ या अधिक विस्तृत डेटा के लिए वेंडर के भुगतान वाले टियर का उपयोग करना पड़ता है।

यहाँ सेल्फ-होस्टेड का वास्तव में क्या अर्थ है?

वेब पेज, शेड्यूलर, संग्रहीत फाइलें और बैकटेस्टर सभी आपकी अपनी मशीन या सर्वर पर चलते हैं, और किसी अन्य के प्लेटफॉर्म पर कोई अकाउंट नहीं होता। इसका मतलब यह नहीं है कि डेटा आपका है, और वैकल्पिक AI फीचर्स तब तक रिमोट रहते हैं जब तक आप उन्हें अपने नेटवर्क पर किसी मॉडल से कनेक्ट नहीं करते।

क्या LLM फीचर मेरा डेटा किसी तीसरे पक्ष को भेजता है?

जब इसे चालू किया जाता है, तो हाँ, यह आपके द्वारा कॉन्फ़िगर किए गए किसी भी OpenAI-संगत एंडपॉइंट पर डेटा भेजता है। यह फीचर डिफ़ॉल्ट रूप से बंद रहता है: यदि AI की (AI key) खाली है, तो मशीन से कोई डेटा बाहर नहीं जाता है।

वर्ज़न टैग के बजाय कमिट SHA को पिन क्यों करें?

13 अगस्त 2026 तक इस रिपॉजिटरी में कोई प्रकाशित रिलीज़ और रिलीज़ नोट्स नहीं थे, और इसका नवीनतम टैग डिफ़ॉल्ट ब्रांच से पुराने कोड की ओर इशारा कर रहा था। ऐसी स्थिति में "लेटेस्ट" का अर्थ वह कोड होता है जो क्लोन करने के दिन ब्रांच में मौजूद था, जबकि कमिट SHA सटीक होता है। यही अनुशासन सामान्यतः ओपन-सोर्स क्वांट ट्रेडिंग सामग्री में भी अपनाया जाता है: जो आपने चलाया है उसे पिन करें।

सत्यापन नोट्स

उपरोक्त प्रत्येक आर्किटेक्चर और कॉन्फ़िगरेशन विवरण को 13 अगस्त 2026 को पब्लिक रिपॉजिटरी से पढ़ा गया था, जो कमिट ecfddb451e97f6fc9a7e43ac33e4ef0e69933b33 पर आधारित है, जो डिफ़ॉल्ट ब्रांच का हेड है और 6 अगस्त 2026 को दिनांकित है। रिलीज़ पेज पर कुछ भी सूचीबद्ध नहीं था; टैग सूची में v0.1.31 से v0.1.88 तक 31 वर्ज़न टैग थे, जिनमें से सबसे नया 31 जुलाई 2026 के कमिट की ओर इशारा करता था। उद्धृत पंक्तियाँ मेंटेनर की अपनी हैं, जिन्हें README से कॉपी किया गया है, न कि पैराफ्रेज़ किया गया है। कंटेनर स्टार्ट कमांड को उसी README से उद्धृत किया गया है और यहाँ निष्पादित नहीं किया गया था।

मार्केट पैनल US लिस्टिंग हैं, जिन्हें निश्चित पिछली तारीखों पर पिन किया गया है ताकि आंकड़े स्थिर रहें। इनका उद्देश्य चीनी बाजार का वर्णन करना नहीं, बल्कि उन दो जांचों को प्रदर्शित करना है जो किसी भी बाजार पर लागू होती हैं: निष्पादन लागत (execution cost) और कॉर्पोरेट-एक्शन समायोजन।


यहाँ प्रत्येक पैनल उस SQL के साथ आता है जिसने इसे तैयार किया है, जिसे नीचे विस्तारित किया जा सकता है। किसी भी नाम को स्क्रीनर में डालने से पहले अपनी खुद की सूची में वही स्प्रेड चेक चलाने के लिए, Strasmore टर्मिनल पर इसे सरल अंग्रेजी में मांगें।

#open-source#backtesting#screening#a-shares#self-hosted