Strasmore Research

Open Source Quant Trading Book سیکھنے کا مکمل راستہ

یہ open source quant trading book data سے live order تک پورا syllabus سمجھاتی ہے، beginners کے عام failures دکھاتی ہے اور US stocks میں قابلِ منتقلی مراحل واضح کرتی ہے۔

ایک open source quant trading book ایک مفت عوامی نصاب ہے۔ اس میں raw data سے live order تک پورا راستہ اسی ترتیب سے لکھا گیا ہے جس ترتیب سے ایک beginner اسے سیکھتا ہے۔ xingwudao کی GitHub پر شائع کردہ XQuant: Everyone Can Be a Quantitative Trader کا manuscript، اگست 2026 تک 686 stars کے ساتھ، اس کی ایک واضح مثال ہے۔ اس کے نو chapters تقریباً ہر quant curriculum کے بنیادی سفر کو بیان کرتے ہیں۔ یہ صفحہ اسی سفر کو stage by stage بیان کرتا ہے، ہر stage میں موجود مخصوص failure کی نشاندہی کرتا ہے، اور بتاتا ہے کہ Chinese A shares سے US equities تک منتقلی میں کون سے حصے برقرار رہتے ہیں۔

ایک open source quant trading book میں کیا شامل ہوتا ہے؟

کسی بھی beginner syllabus کی branding ہٹا دیں تو پانچ مراحل باقی رہتے ہیں، اور ان کی ترتیب یہی ہوتی ہے: data حاصل کرنا اور صاف کرنا، اس سے signal بنانا، اس signal کو تاریخی data کے مقابل test کرنا، یہ طے کرنا کہ کتنی بڑی پوزیشن لینی ہے، پھر order بھیجنا اور اخراجات ادا کرنا۔ 14 جولائی 2026 کے commit 016b66e پر موجود XQuant کا contents نو chapters میں اسی عمل کا احاطہ کرتا ہے۔

  • Preparation، پھر chapter one: ایک مکمل strategy کو end to end چلانا۔
  • Chapter two، کیا خریدنا ہے: تین ETFs سے آغاز۔
  • Chapter three، کتنی مقدار خریدنی ہے: allocation کے تین طریقے، جن کا باہمی موازنہ کیا گیا ہے۔
  • Chapter four، کب trade کرنا ہے: rebalancing، stop loss، take profit۔
  • Chapter five، یہ جانچنا کہ strategy واقعی اچھی ہے یا نہیں: چار زاویے۔
  • Chapter six، جلد جشن نہ منائیں: overfitting کی روک تھام۔
  • Chapter seven، ideal سے real تک: trades کو execute کرنا۔
  • Chapter eight، launch کے بعد کی زندگی: monitoring، diagnosis، iteration۔
  • Chapter nine، نئے مواقع تلاش کرنا: factor research کا تعارف۔

ترتیب پر توجہ دینا ضروری ہے۔ Position sizing chapter three میں آتی ہے، یعنی دونوں backtest chapters سے پہلے، جبکہ factor research آخر میں آتی ہے۔ خود سیکھنے کے راستے عموماً اس کے برعکس ہوتے ہیں: پہلے factor idea، دوسرے مرحلے میں backtest، اور sizing rule کبھی نہیں۔ Companion exercise repository، جس کے 333 stars ہیں اور یہی تاریخ درج ہے، مکمل code کے بجائے تحریری task specifications کے گرد منظم ہے؛ قاری AI assistant کو ان specifications پر عمل درآمد کی ہدایت دیتا ہے۔ وہ code پڑھنا جو آپ نے خود نہیں لکھا، اب بھی وہ skill ہے جو نیچے بیان ہونے والی ہر چیز کا فیصلہ کرتی ہے، کیونکہ ہر اگلی خرابی implementation کی کسی ایک detail کے اندر چھپی ہوتی ہے۔

مرحلہ اول: پہلے data حاصل کریں، پھر universe متعین کریں

Data کی صفائی، data کے کام کا نظر آنے والا نصف ہے: غلط prints، غائب سیشنز، اور split اور dividend adjustments۔ یہ طے کرنا کہ کن names کا مطالعہ کرنا ہے، اس کام کا پوشیدہ نصف ہے۔ یہیں survivorship bias داخل ہوتا ہے، اس سے پہلے کہ strategy code کی ایک سطر بھی لکھی جائے۔ جون کے ایک ہفتے کے دوران ہر سال trade کرنے والے تمام US tickers لیں، پھر معلوم کریں کہ 2026 کے اسی ہفتے میں ان میں سے کتنے اب بھی trade کر رہے تھے۔

استفسار کریںجون کے ایک ہفتے میں ٹریڈ ہونے والے US tickers، اور جون 2026 میں اب بھی ٹریڈ ہونے والے tickers کی تعداد
ہر عدد کے پیچھے موجود درست 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
Run this yourself

2016 کے اس ہفتے میں trade کرنے والے 8224 tickers میں سے 502026 کے اسی ہفتے میں اب بھی trade کر رہے تھے۔ باقی acquired، merged، renamed یا delisted ہو گئے۔ آج کے roster سے بنائے گئے backtest میں صرف وہ names شامل ہوتے ہیں جو برقرار رہے، اور strategy کو بعد میں منتخب کی گئی companies رکھنے کا فائدہ دیا جاتا ہے۔ Beginner feed یہ survivor list آپ کو کسی warning label کے بغیر دے گا: free stock market data API کی رہنمائی میں بتایا گیا ہے کہ یہ feeds کیا data فراہم کرتے ہیں اور کیا نہیں۔

مرحلہ دوم: ڈیٹا کو سگنل میں تبدیل کریں

سگنل ایک ایسا اصول ہے جو کسی مخصوص وقت پر کسی اسٹاک کو اسکور دیتا ہے، جبکہ factor وہ سگنل ہے جس کے بارے میں آپ سمجھتے ہیں کہ وہ بیک وقت بہت سے اسٹاکس پر مؤثر رہتا ہے۔ Momentum، value اور low volatility اس کی درسی مثالیں ہیں۔ اس مرحلے میں بنیادی غلطی یہ ہے کہ اصولوں کو اس وقت تک آزماتے رہیں جب تک ان میں سے کوئی ایک کام نہ کرنے لگے۔ ایک ہی index کی ایک دہائی کے ڈیٹا پر moving-average crossover کی بیس مختلف صورتوں کی جانچ ہمیشہ ایک فاتح پیدا کرے گی، اور وہ فاتح دراصل noise کے ساتھ سب سے بہتر fit ہونے والا اصول ہوگا۔ اس سے بچاؤ کے طریقے غیر دلکش مگر مؤثر ہیں: پیمائش سے پہلے اصول کو حتمی شکل دیں، تاریخ کے ایک حصے کو الگ رکھیں جسے آپ کبھی نہ دیکھیں، آزمائی گئی ہر variant کو شمار کریں، اور ایسے اصولوں کو ترجیح دیں جن میں قابلِ تنظیم اعداد کم ہوں۔ XQuant نے factor research سے پہلے اس موضوع پر پورا باب رکھا ہے، اور یہی درست ترتیب ہے۔

مرحلہ تین: backtest، جہاں زیادہ تر beginners رک جاتے ہیں

یہ وہ مرحلہ ہے جہاں خود سیکھنے والے زیادہ تر projects ختم ہو جاتے ہیں۔ یہ خاموشی سے ختم ہوتے ہیں، ایک بہت اچھی نظر آنے والی equity curve کے ساتھ۔ اوپر بیان کیا گیا survivorship، دو غلطیوں میں سے پہلی ہے۔ Look-ahead bias دوسری غلطی ہے۔ اس میں strategy ایسا number استعمال کرتی ہے جو order داخل کیے جانے کے وقت تک clock نے فراہم نہیں کیا تھا۔ اس کی عام صورت یہ ہے کہ rule آج کی closing price سے calculate کیا جائے اور اسی closing price پر fill بھی کر دیا جائے۔ اس مفروضے سے نظرانداز ہونے والے فاصلے کو ناپیں۔

استفسار کریںماہانہ: ایک session کے close سے اگلے session کے open تک اوسط فاصلہ
ہر عدد کے پیچھے موجود درست 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 month
Run this yourself

July 2026 میں، ایک close اور اگلے opening print کے درمیان اوسط فاصلہ SPY کے لیے 40.8 basis points اور NVDA کے لیے 107.4 basis points تھا۔ ایک basis point، percentage point کا ایک سوواں حصہ ہوتا ہے۔ 24 months، جو August 2024 سے شروع ہوتے ہیں، panel میں zero سے اوپر ہیں۔ ایسا backtest جو close پر فیصلہ کرتا ہے اور اسی close پر fill کرتا ہے، ہر trade پر یہ فاصلہ بلا معاوضہ حاصل کر لیتا ہے، جبکہ کوئی live order کبھی ایسا نہیں کرتا۔ backtesting میں Look-ahead bias اس mechanism کو تفصیل سے واضح کرتا ہے، اور stocks رات بھر gap کیوں کرتے ہیں خود gap کی وضاحت کرتا ہے۔

مرحلہ چار: کتنی خریداری کرنی ہے، فیصلہ کریں

یہاں بنیادی مسئلہ عدم موجودگی ہے۔ زیادہ تر خود سیکھنے والے traders کبھی position sizing کا اصول تحریر نہیں کرتے۔ اس کا مطلب ہے کہ ان کے پاس یہ اصول اتفاقاً موجود ہوتا ہے، عموماً ہر نام میں برابر ڈالر لگانے یا دستیاب نقد رقم استعمال کرنے کی صورت میں۔ برابر ڈالر لگانا برابر risk کے مترادف نہیں ہے۔

استفسار کریںروزانہ movements کے بارہ ماہ: annualized volatility اور بدترین session، آٹھ names
ہر عدد کے پیچھے موجود درست 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 DESC
Run this yourself

31 جولائی 2026 کو ختم ہونے والے بارہ ماہ کے دوران، COIN کی annualized volatility 68% رہی، جبکہ panel کے نسبتاً پرسکون سرے پر SPY کے لیے یہ شرح 12.7% تھی۔ COIN کا بدترین single-session close گزشتہ close سے 13.34% کم رہا، جبکہ SPY کا بدترین دن 2.69% تھا۔ ہر نام میں یکساں ڈالر لگانے سے روزانہ کے اتار چڑھاؤ کی سطحیں بہت مختلف حاصل ہوتی ہیں۔ ایک beginner حقیقی طور پر signal نہیں بلکہ یہی اتار چڑھاؤ محسوس کرتا ہے۔ Kelly criterion کے مطابق position sizing ایک باقاعدہ جواب پیش کرتا ہے، جبکہ concentration risk غیر رسمی طریقے کی ساخت دکھاتا ہے۔

مرحلہ پانچ: execution اور وہ costs جنہیں backtest نظرانداز کرتا ہے

دو costs ہیں، مگر statement پر صرف ایک نظر آتی ہے۔ Commissions اور regulatory fees statement میں ظاہر ہوتے ہیں۔ Slippage ظاہر نہیں ہوتی۔ یہ screen پر دکھائی دینے والی price اور ملنے والی price کے درمیان فرق ہے۔ اس کی کم از کم حد bid-ask spread ہے، یعنی اس لمحے کی بہترین buying quote اور بہترین selling quote کے درمیان فاصلہ۔ Buyers ask پر خریدتے ہیں اور sellers bid پر فروخت کرتے ہیں، اس لیے round trip میں spread دو مرتبہ عبور ہوتا ہے۔ Spread مستقل نہیں ہوتا۔

استفسار کریںET کے ہر نصف گھنٹے کے حساب سے اوسط quoted spread: AAPL اور KO، جمعہ 17 جولائی 2026
ہر عدد کے پیچھے موجود درست 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
Run this yourself

یہ panel ایک Friday کے 16 نصف گھنٹے کے buckets دکھاتا ہے۔ اس میں opening bell سے پہلے والا 09:00 bucket اور market close کے بعد والا 16:30 bucket شامل ہے۔ پہلے bucket میں AAPL کا quoted spread 10.53 basis points تھا، جبکہ آخری bucket میں 3.27 تھا۔ KO کے لیے یہ اعداد بالترتیب 28.87 اور 8.04 تھے۔ دن کی tightest quotes chart کے درمیان میں، ان دونوں سروں کے بیچ، نظر آتی ہیں۔ Market کے دو انتہائی liquid names میں open پر trade کرنے والی strategy، اسی strategy کے midday version سے مختلف cost ادا کرتی ہے۔ Zero-cost assumption والا backtest دونوں میں سے کسی کی درست pricing نہیں کرتا۔ bid-ask spread اس number کی وضاحت کرتا ہے، open پر spreads کیوں وسیع ہوتے ہیں curve کی وجہ بیان کرتا ہے، اور stock trade کرنے کی cost مکمل round trip کا حساب پیش کرتا ہے۔ Clean backtest اور real money کے درمیان ایک اور مرحلہ ہے: real money سے پہلے paper trading۔

A share curriculum کے کون سے حصے US stocks پر لاگو ہوتے ہیں؟

XQuant اور اس کے ہم عصر Chinese A shares اور ETFs کے لیے تیار کیے گئے ہیں۔ طریقہ کار اپنی بنیادی شکل میں منتقل ہو جاتا ہے: مراحل کی ترتیب، تعریفیں، overfitting سے گریز کا نظم، اخراجات کو بعد میں شامل کرنے کے بجائے الگ line item کے طور پر لکھنے کی عادت، اور position sizing کے حساب کا ہر جزو۔ Price bars ہر market میں price bars ہی رہتے ہیں۔ جو چیز منتقل نہیں ہوتی، وہ ان کے گرد موجود rule book ہے۔

  • A shares میں حقیقی T+1 پابندی ہے: آج خریدے گئے stock کو اگلے 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 میں روزانہ کی کوئی cap نہیں ہوتی؛ اس کے بجائے pauses، volatility bands اور news halts کی وجہ سے آتے ہیں۔
  • A share orders، 100 shares کے lots میں trade ہوتے ہیں۔ بہت سے US brokers fractional shares بھی fill کرتے ہیں، جس سے یہ بدل جاتا ہے کہ 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 نہیں، reference کو pin کریں

اگست 2026 تک repository میں کوئی tagged release موجود نہیں، اس لیے پائیدار citation ایک commit ہے: 016b66e، جس کی تاریخ 14 جولائی 2026 ہے۔ یہ اس کتاب کے لیے اہم ہے جو ابھی لکھی جا رہی ہے۔ Chapter numbers تبدیل ہو سکتے ہیں، README files دوبارہ لکھی جا سکتی ہیں، headings منتقل ہو سکتی ہیں، اور جو link chapter seven کی طرف اشارہ کرتا تھا وہ خاموشی سے کسی اور مواد کی طرف اشارہ کرنے لگتا ہے۔ Commit اور تاریخ کو cite کریں، اور chapter number کے بجائے پڑھے گئے chapter کا title درج کریں؛ اس طرح آپ کے notes ایک سال بعد بھی قابلِ جانچ رہیں گے۔ Manuscript CC BY-NC-SA 4.0 کے تحت شائع کیا گیا ہے، جبکہ build scripts MIT کے تحت ہیں۔ یہی discipline خود syllabus کا آخری سبق بھی ہے: ایسی strategy جسے pinned data snapshot سے دوبارہ run نہ کیا جا سکے، result نہیں بلکہ محض ایک story ہے۔

عمومی سوالات

کیا آپ مفت اوپن سورس کتاب سے quant trading سیکھ سکتے ہیں؟

نقشۂ کار کے لیے جواب ہاں ہے، اور اوپن manuscript آپ کو ہر دعوے کو اس کے source سے جانچنے کی اجازت دیتا ہے۔ لیکن کتاب آپ کی اپنی market کے data، costs اور rules فراہم نہیں کر سکتی۔ یہی وہ مقام ہے جہاں ایک exchange کے لیے تیار کیا گیا syllabus آپ کے broker سے مطابقت رکھنا چھوڑ دیتا ہے۔

quant curriculum کا کون سا مرحلہ زیادہ تر beginners کو روک دیتا ہے؟

Backtest۔ یہاں دو غلطیاں نتیجے کو بہتر ظاہر کرتی ہیں: survivorship، جو بعد میں بنائی گئی universe سے پیدا ہوتی ہے، اور look-ahead، جو ایسی price پر fill کرنے سے پیدا ہوتی ہے جسے اس وقت clock نے ابھی print نہیں کیا تھا۔ 50% کے صرف اتنے tickers جو 2016 کے اس June week میں trade کر رہے تھے، ایک دہائی بعد بھی trade کر رہے تھے۔

survivorship bias اور look-ahead bias میں کیا فرق ہے؟

Survivorship bias ایک universe کا مسئلہ ہے: test کیے جانے والے names کا انتخاب اس بنیاد پر کیا گیا کہ وہ برقرار رہے۔ Look-ahead bias timing کا مسئلہ ہے: strategy ایسا number استعمال کرتی ہے جو order داخل کیے جانے کے وقت موجود نہیں تھا۔ پہلی غلطی roster کو بڑھا چڑھا کر دکھاتی ہے، دوسری fill کو۔

کیا Chinese A share quant course، US stocks کے لیے کام کرتا ہے؟

Method کام کرتا ہے، market rules نہیں۔ Stage order، overfitting discipline اور cost accounting برقرار رکھیں۔ پھر کوئی رقم منتقل کرنے سے پہلے data plumbing، T+1 selling restriction، daily price limits اور lot sizes کو US equivalents سے تبدیل کریں۔


اوپر موجود ہر panel ایک stored query ہے، جس کے نیچے اس کا SQL موجود ہے۔ کسی panel کو کھولیں، tickers یا dates تبدیل کریں، اور اسے Strasmore terminal پر خود چلائیں۔

#quant#learning path#backtesting#open source#beginners