Strasmore Research
آموزش Matt Connorتوسط Matt Connor

یادگیری معامله‌گری کمی با یک کتاب متن‌باز

کتاب متن‌باز معامله‌گری کمی، مسیر آموزش از داده خام تا ثبت سفارش را توضیح می‌دهد؛ از توقف مبتدیان تا کاربرد این روش در سهام ایالات متحده.

کتاب متن‌باز معامله‌گری کمی، یک برنامه آموزشی عمومی و رایگان است. این کتاب، کل مسیر از داده خام تا ثبت سفارش واقعی را به همان ترتیبی که یک مبتدی با آن روبه‌رو می‌شود، مستند می‌کند. دست‌نوشته XQuant: همه می‌توانند معامله‌گر کمی باشند که xingwudao آن را در GitHub منتشر کرده است، تا اوت 2026 نمونه‌ای منسجم با 686 ستاره محسوب می‌شود. 9 فصل آن نیز مسیری را دنبال می‌کنند که تقریباً همه برنامه‌های آموزشی معامله‌گری کمی طی می‌کنند. این صفحه مسیر را مرحله‌به‌مرحله دنبال می‌کند، خطای مشخص هر مرحله را توضیح می‌دهد و مشخص می‌کند کدام بخش‌ها از سهام A چین به سهام ایالات متحده قابل انتقال هستند.

یک کتاب معاملات کمّی متن‌باز چه محتوایی دارد؟

اگر نام تجاری را از هر سرفصل مقدماتی حذف کنیم، پنج مرحله باقی می‌ماند؛ به همین ترتیب: داده را گردآوری و پاک‌سازی کنید، بر اساس آن یک سیگنال بسازید، سیگنال را در برابر تاریخچه آزمایش کنید، اندازه موقعیت را تعیین کنید، سپس سفارش را ارسال و هزینه‌ها را پرداخت کنید. فهرست مطالب XQuant، بر اساس commit 016b66e در 14 ژوئیه 2026، همین مسیر را در نه فصل پوشش می‌دهد.

  • آماده‌سازی، سپس فصل اول: اجرای یک استراتژی کامل از ابتدا تا انتها.
  • فصل دوم، چه چیزی بخریم: شروع با سه ETF.
  • فصل سوم، چه مقدار بخریم: مقایسه سه روش تخصیص سرمایه.
  • فصل چهارم، چه زمانی معامله کنیم: بازمتوازن‌سازی، حد ضرر و برداشت سود.
  • فصل پنجم، چگونه تشخیص دهیم یک استراتژی خوب است یا نه: چهار دیدگاه.
  • فصل ششم، زود خوشحال نشوید: جلوگیری از بیش‌برازش.
  • فصل هفتم، از حالت ایده‌آل تا واقعیت: اجرای معاملات.
  • فصل هشتم، زندگی پس از راه‌اندازی: پایش، عیب‌یابی و تکرار.
  • فصل نهم، یافتن فرصت‌های جدید: مقدمه‌ای بر پژوهش عوامل.

ترتیب فصل‌ها شایسته توجه است. تعیین اندازه موقعیت در فصل سوم، پیش از هر دو فصل مربوط به بک‌تست آمده و پژوهش عوامل به فصل آخر موکول شده است. مسیرهای خودآموز معمولاً برعکس پیش می‌روند: ابتدا ایده‌ای درباره یک عامل، سپس بک‌تست و هیچ قاعده‌ای برای تعیین اندازه موقعیت. مخزن تمرین همراه کتاب، با 333 ستاره در همان تاریخ، بر مشخصات مکتوب وظایف، نه کد نهایی، سازمان‌دهی شده است و خواننده باید از یک دستیار هوش مصنوعی بخواهد آن‌ها را پیاده‌سازی کند. توانایی خواندن کدی که خودتان ننوشته‌اید، همچنان مهارتی است که نتیجه همه مراحل بعدی را تعیین می‌کند؛ زیرا هر شکست بعدی در یک جزئیات اجرایی پنهان است.

مرحله اول: داده‌ها را دریافت کنید، سپس جامعه آماری را تعریف کنید

پاک‌سازی، نیمه قابل مشاهده کار با داده‌هاست: معاملات ثبت‌شده نادرست، جلسات معاملاتی ازدست‌رفته و تعدیلات مربوط به تجزیه سهام و سود نقدی. انتخاب نام‌هایی که باید بررسی شوند، نیمه نامرئی کار است. سوگیری بقا پیش از آنکه حتی یک خط کد استراتژی نوشته شود، از همین‌جا وارد می‌شود. تمام tickerهای ایالات متحده را که طی یک هفته در ماه ژوئن، به‌صورت سال‌به‌سال، معامله‌ای ثبت کرده‌اند در نظر بگیرید. سپس بپرسید چند مورد از آن‌ها در همان هفته در سال 2026 همچنان معامله می‌شدند.

پرس‌وجونمادهای معاملاتی آمریکا در یک هفته ژوئن و تعداد نمادهایی که همچنان در ژوئن ۲۰۲۶ معامله شدند
کد دقیق 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

از میان 8224 ticker که در آن هفته از 2016 معامله شدند، 50% مورد در همان هفته از 2026 همچنان معامله می‌شدند. سایر موارد خریداری شدند، ادغام شدند، نامشان تغییر کرد یا از فهرست معاملات حذف شدند. بک‌تستی که بر اساس فهرست امروزی ساخته شود، فقط نام‌هایی را بررسی می‌کند که دوام آورده‌اند و به شرکتی که پس از وقوع رویداد انتخاب شده، بابت نگهداری سهام پاداش می‌دهد. یک فید داده مقدماتی، این فهرست بازماندگان را بدون هیچ برچسب هشداری در اختیار شما می‌گذارد: راهنمای API رایگان داده‌های بازار سهام توضیح می‌دهد این فیدها چه داده‌هایی را ارائه می‌کنند و چه داده‌هایی را پوشش نمی‌دهند.

مرحله دوم: داده را به سیگنال تبدیل کنید

سیگنال قاعده‌ای است که در یک مقطع زمانی به یک سهم امتیاز می‌دهد. فاکتور نیز سیگنالی است که معتقدید برای تعداد زیادی از سهام به‌طور هم‌زمان اعتبار دارد. مومنتوم، ارزش و نوسان پایین، نمونه‌های کلاسیک آن هستند. خطای این مرحله، آزمودن مکرر قواعد تا رسیدن به یک نتیجه مطلوب است. اگر 20 گونه از تقاطع میانگین‌های متحرک را روی یک دهه از داده‌های یک شاخص آزمایش کنید، همیشه یکی از آن‌ها برنده خواهد شد؛ اما این برنده همان قاعده‌ای است که بیش از همه با نویز داده‌ها تطبیق پیدا کرده است. راهکارهای دفاعی چندان جذاب نیستند: پیش از اندازه‌گیری، قاعده را نهایی کنید؛ بخشی از تاریخچه را که هرگز به آن نگاه نمی‌کنید کنار بگذارید؛ تمام گونه‌هایی را که آزموده‌اید ثبت کنید؛ و قواعدی را ترجیح دهید که اعداد قابل‌تنظیم کمتری دارند. 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 month
Run this yourself

در July 2026، میانگین فاصله میان یک قیمت پایانی و قیمت آغازین بعدی، برای SPY برابر با 40.8 واحد پایه و برای NVDA برابر با 107.4 واحد پایه بود. هر واحد پایه یک‌صدم درصد است. هر 24 ماه از دوره بررسی، از August 2024 به بعد، بالاتر از صفر قرار دارد. بک‌تستی که در قیمت پایانی تصمیم می‌گیرد و همان‌جا معامله را اجرا می‌کند، در هر معامله این فاصله را بدون هزینه به دست می‌آورد؛ اما هیچ سفارش واقعی چنین مزیتی ندارد. سوگیری نگاه به آینده در بک‌تست سازوکار آن را تشریح می‌کند و چرا سهام در طول شب با شکاف قیمتی باز می‌شوند خودِ این شکاف را توضیح می‌دهد.

مرحله چهارم: تعیین میزان خرید

مشکل در اینجا، نبودِ قاعده است. بیشتر معامله‌گران خودآموخته هرگز قاعده‌ای برای تعیین اندازه موقعیت نمی‌نویسند. بنابراین، به‌طور تصادفی از یک قاعده پیروی می‌کنند؛ معمولاً اختصاص مبلغی برابر به هر نماد یا صرف هر مقدار وجه نقد موجود. مبالغ برابر، به معنای ریسک برابر نیست.

پرس‌وجودوازده ماه نوسان روزانه: نوسان سالانه‌شده و بدترین جلسه، هشت نماد
کد دقیق 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

در دوره 12ماهه منتهی به 31 ژوئیه 2026، COIN با نوسان‌پذیری سالانه‌شده 68% معامله شد؛ این رقم برای SPY، که در بخش کم‌نوسان پنل قرار داشت، 12.7% بود. بدترین جلسه معاملاتی آن با افت 13.34% نسبت به قیمت پایانی روز قبل به پایان رسید، در حالی که بدترین روز در SPY با افت 2.69% همراه بود. اختصاص مبلغی برابر به هر نماد، نوسان‌های روزانه بسیار متفاوتی ایجاد می‌کند. آنچه معامله‌گر مبتدی واقعاً تجربه می‌کند همین نوسان است، نه سیگنال. تعیین اندازه موقعیت بر اساس معیار Kelly یکی از پاسخ‌های رسمی به این مسئله را ارائه می‌کند و ریسک تمرکز شکل پاسخ غیررسمی آن را نشان می‌دهد.

مرحله پنجم: اجرا و هزینه‌هایی که بک‌تست فراموش می‌کند

دو هزینه وجود دارد؛ اما فقط یکی از آن‌ها قابل مشاهده است. کمیسیون‌ها و کارمزدهای نظارتی در صورت‌حساب نمایش داده می‌شوند. لغزش قیمتی چنین نیست. لغزش قیمتی تفاوت میان قیمت روی صفحه و قیمتی است که معامله با آن انجام می‌شود. حداقل این هزینه، فاصله خریدوفروش است؛ یعنی فاصله میان بهترین قیمت پیشنهادی خرید و بهترین قیمت پیشنهادی فروش در همان لحظه. خریداران قیمت فروش را می‌پردازند و فروشندگان با قیمت خرید معامله می‌کنند. بنابراین، یک رفت‌وبرگشت معاملاتی دو بار از این فاصله عبور می‌کند. فاصله خریدوفروش ثابت نیست.

پرس‌وجومیانگین شکاف مظنه به‌ازای هر نیم‌ساعت به وقت شرق آمریکا: AAPL و KO، جمعه ۱۷ ژوئیه ۲۰۲۶
کد دقیق 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

این نمودار 16 بازه نیم‌ساعته از یک جمعه را پوشش می‌دهد؛ از بازه 09:00 پیش از به صدا درآمدن زنگ آغاز معاملات تا بازه 16:30 پس از پایان بازار. فاصله خریدوفروش AAPL در نخستین بازه 10.53 واحد پایه و در آخرین بازه 3.27 واحد پایه بود؛ این رقم برای KO به‌ترتیب 28.87 و 8.04 بود. کمترین فاصله‌های قیمت‌گذاری روز در بخش میانی نمودار، میان این دو انتها، دیده می‌شوند. راهبردی که در نمادهای نقدشونده بازار در آغاز معاملات خریدوفروش می‌کند، هزینه‌ای متفاوت از نسخه‌ای از همان راهبرد در میانه روز می‌پردازد. بک‌تستی که هزینه را صفر فرض می‌کند، هیچ‌کدام از این دو وضعیت را به‌درستی قیمت‌گذاری نمی‌کند. فاصله خریدوفروش این رقم را تعیین می‌کند، دلیل افزایش فاصله‌ها در آغاز معاملات منحنی را توضیح می‌دهد و هزینه معامله یک سهم هزینه کامل یک رفت‌وبرگشت را جمع‌بندی می‌کند. میان یک بک‌تست پاک و سرمایه واقعی، یک مرحله دیگر باقی می‌ماند: معامله کاغذی پیش از ورود با سرمایه واقعی.

کدام بخش‌های آموزش سهام A به سهام آمریکا قابل انتقال است؟

XQuant و روش‌های مشابه آن برای سهام و ETFهای نوع A چین طراحی شده‌اند. این روش در کلیت خود قابل انتقال است: ترتیب مراحل، تعاریف، انضباط در برابر بیش‌برازش، عادت به ثبت هزینه‌ها به‌عنوان یک ردیف مستقل و نه یک موضوع فرعی، و تمام اجزای محاسبات اندازه موقعیت. نمودارهای قیمت، همان نمودارهای قیمت هستند. آنچه قابل انتقال نیست، مقررات پیرامون آن‌هاست.

  • سهام A مشمول محدودیت واقعی T+1 هستند: سهامی که امروز خریداری شود، تا جلسه معاملاتی بعد قابل فروش نیست. T+1 در آمریکا یک رویه تسویه است و مانع معاملات درون‌روزی نمی‌شود؛ هرچند قاعده معامله‌گر روزانه الگو حساب‌های مارجین زیر 25٬000 دلار را به سه معامله روزانه در پنج روز کاری محدود می‌کند.
  • سهام بازار اصلی A با سقف نوسان روزانه 10 درصدی مواجه‌اند و این سقف در بازارهای رشد به 20 درصد می‌رسد. سهام آمریکا سقف روزانه ندارند و توقف‌ها در عوض بر اساس دامنه‌های نوسان و توقف‌های خبری اعمال می‌شوند.
  • سفارش‌های سهام A در lotهای 100 سهمی معامله می‌شوند. بسیاری از کارگزاران آمریکایی سهام کسری را نیز معامله می‌کنند؛ موضوعی که دامنه بیان یک قاعده اندازه موقعیت را تغییر می‌دهد.
  • چین در سمت فروش مالیات تمبر دریافت می‌کند. فروشندگان در آمریکا کارمزدهای نظارتی اندکی می‌پردازند که از نظر اندازه و ساختار متفاوت است.
  • ساختار جلسات معاملاتی نیز متفاوت است و بازارهای شانگهای و شنژن، برای نمونه، وقفه‌ای در میانه روز دارند. ساعات معاملات بازار سهام آمریکا پیوسته است و با حراج پایانی به پایان می‌رسد.

هر هزینه یا ثابت زمانی که از یک دوره آموزشی مستقیماً وارد کد خود کنید، ایرادی است که منتظر نخستین سفارش واقعی می‌ماند.

مرجع را تثبیت کنید، نه README را

تا اوت 2026، این مخزن هیچ انتشار برچسب‌گذاری‌شده‌ای ندارد؛ بنابراین، ارجاع پایدار آن یک commit است: 016b66e، مورخ 14 ژوئیه 2026. این موضوع برای کتابی که هنوز در حال نگارش است اهمیت دارد. شماره فصل‌ها تغییر می‌کنند، فایل‌های README بازنویسی می‌شوند، عنوان‌ها جابه‌جا می‌شوند و پیوندی که به فصل هفتم اشاره می‌کرد، ممکن است بی‌سروصدا به بخش دیگری اشاره کند. به commit و تاریخ آن ارجاع دهید، عنوان فصلی را که خوانده‌اید، نه شماره آن، ثبت کنید تا یادداشت‌هایتان یک سال بعد نیز قابل بررسی باقی بمانند. این دست‌نوشته تحت مجوز CC BY-NC-SA 4.0 منتشر شده و اسکریپت‌های ساخت آن تحت مجوز MIT قرار دارند. همین انضباط، آخرین درس خودِ این سرفصل نیز هست: راهبردی که نتوان آن را از یک snapshot داده تثبیت‌شده دوباره اجرا کرد، یک روایت است، نه یک نتیجه.

پرسش‌های متداول

آیا می‌توان معامله‌گری کمی را از یک کتاب رایگان و متن‌باز آموخت؟

برای ترسیم نقشه راه، بله. همچنین، یک دست‌نوشته متن‌باز به شما امکان می‌دهد هر ادعا را با منبع آن تطبیق دهید. اما کتاب نمی‌تواند داده‌ها، هزینه‌ها و مقررات بازار خودتان را فراهم کند. دقیقاً در همین نقطه است که برنامه درسی نوشته‌شده برای یک بورس، دیگر با کارگزار شما همخوانی ندارد.

کدام مرحله از برنامه درسی معامله‌گری کمی، بیشتر مبتدیان را متوقف می‌کند؟

آزمون پس‌نگر. دو خطا در این مرحله وجود دارد و هر دو نتیجه را بهتر از واقعیت نشان می‌دهند: سوگیری بقا، ناشی از تشکیل مجموعه نمادها پس از وقوع رویدادها، و سوگیری نگاه به آینده، ناشی از ثبت معامله در قیمتی که هنوز در آن زمان در سامانه ثبت نشده بود. تنها 50% از نمادهایی که در آن هفته ژوئنِ 2016 معامله می‌شدند، یک دهه بعد همچنان فعال بودند.

تفاوت سوگیری بقا و سوگیری نگاه به آینده چیست؟

سوگیری بقا، مشکلی مربوط به مجموعه نمادهاست: نمادهای مورد آزمون بر اساس دوام آوردنشان انتخاب شده‌اند. سوگیری نگاه به آینده، مشکلی مربوط به زمان‌بندی است: راهبرد از عددی استفاده می‌کند که هنگام ارسال سفارش هنوز وجود نداشته است. اولی فهرست نمادها را بیش از حد مطلوب نشان می‌دهد و دومی قیمت اجرای معامله را بهتر از واقعیت نشان می‌دهد.

آیا دوره معامله‌گری کمی سهام A چین برای سهام آمریکا کاربرد دارد؟

روش کار، بله. مقررات بازار، خیر. ترتیب مراحل، انضباط در برابر بیش‌برازش و محاسبه هزینه‌ها را حفظ کنید. سپس، پیش از انتقال هرگونه سرمایه، زیرساخت داده، محدودیت فروش در روز بعد یا T+1، دامنه‌های نوسان روزانه قیمت و اندازه lot را با معادل‌های آمریکایی جایگزین کنید.


هر پنل بالا یک stored query است و SQL آن در زیر پنل قرار دارد. یکی را باز کنید، نمادها یا تاریخ‌ها را تغییر دهید و آن را خودتان روی پایانه Strasmore اجرا کنید.

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