Strasmore Research
آموزش Matt Connorتوسط Matt Connor · به‌روزرسانی شده در 2026-07-24

نحوه محاسبه بازده ماهانه سهام

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

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

از قیمت بسته‌شدن تا بسته‌شدن: قرارداد استاندارد

این قرارداد توسط ارائه‌دهندگان شاخص، برگه مشخصات صندوق‌ها و اکثر صفحات قیمت‌گذاری استفاده می‌شود: بازده ماه از آخرین قیمت بسته‌شدن در جلسات عادی ماه قبل تا آخرین قیمت بسته‌شدن در ماه جاری محاسبه می‌شود. آخرین قیمت بسته‌شدن در ماه مه، نقطه شروع ماه ژوئن است. محاسبات ساده است: قیمت پایانی منهای قیمت شروع، تقسیم بر قیمت شروع. یک مثال ساده: سهامی که در پایان ماه مه در 50.00 دلار و در پایان ماه ژوئن در 53.50 دلار بسته شود، بازده ماهانه آن برابر است با (53.50 − 50.00) ÷ 50.00 = 0.07 یا 7 درصد. تمام قراردادهای ذکر شده در این صفحه، ورودی‌های متفاوتی را به همین فرمول وارد می‌کنند. در اینجا این محاسبات را برای داده‌های واقعی ژوئن 2026، در کنار جایگزین اصلی، مشاهده می‌کنید:

پرس‌وجوژوئن ۲۰۲۶ با دو روش اندازه‌گیری — close-to-close در مقابل open-to-close، NVDA و SPY
کد دقیق SQL پشت هر عدد
SELECT ticker,
       round(argMaxIf(cl, day, day <= '2026-05-31'), 2) AS may_final_close,
       round(argMinIf(op, day, day >= '2026-06-01'), 2) AS june_first_open,
       round(argMaxIf(cl, day, day <= '2026-06-30'), 2) AS june_final_close,
       round(100 * (argMaxIf(cl, day, day <= '2026-06-30') - argMaxIf(cl, day, day <= '2026-05-31'))
             / argMaxIf(cl, day, day <= '2026-05-31'), 2) AS close_to_close_pct,
       round(100 * (argMaxIf(cl, day, day <= '2026-06-30') - argMinIf(op, day, day >= '2026-06-01'))
             / argMinIf(op, day, day >= '2026-06-01'), 2) AS open_to_close_pct,
       round(abs(100 * (argMaxIf(cl, day, day <= '2026-06-30') - argMinIf(op, day, day >= '2026-06-01'))
                 / argMinIf(op, day, day >= '2026-06-01')
             - 100 * (argMaxIf(cl, day, day <= '2026-06-30') - argMaxIf(cl, day, day <= '2026-05-31'))
                 / argMaxIf(cl, day, day <= '2026-05-31')), 2) AS convention_gap_points
FROM (
    SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS day,
               argMinIf(toFloat64(open), window_start, rth) AS op,
               argMaxIf(toFloat64(close), window_start, rth) AS cl
        FROM (
            SELECT ticker, window_start, open, close,
                   toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
                   AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York') AS rth
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker IN ('NVDA', 'SPY')
              AND window_start >= '2026-05-28 04:00:00'
              AND window_start < '2026-07-01 08:00:00'
        )
        GROUP BY ticker, day
)
GROUP BY ticker
ORDER BY ticker

بازده ماه ژوئن برای NVDA از نوع بسته‌شدن تا بسته‌شدن برابر با -5.39% بود — اما از نوع باز شدن تا بسته‌شدن (از اولین جلسه عادی ژوئن تا آخرین بسته‌شدن) برابر با -7.4% است. همان سهم و همان ماه، با اختلاف 2.01 واحد درصد بین این دو پاسخ صحیح. تمام این تفاوت مربوط به یک بازه زمانی شبانه و آخر هفته است: NVDA در پایان ماه مه در قیمت $211.15 بسته شد و در ماه ژوئن با قیمت $215.73 باز شد؛ این جهش در قرارداد باز شدن تا بسته‌شدن جزو بازده «ژوئن» محسوب می‌شود و در قرارداد بسته‌شدن تا بسته‌شدن، در مرز بین دو ماه قرار می‌گیرد. SPY نیز همین ساختار را با تفاوت کمتری نشان می‌دهد: -1.33% از نوع بسته‌شدن تا بسته‌شدن در مقابل -1.2% از نوع باز شدن تا بسته‌شدن.

هیچ‌کدام از این اعداد غلط نیستند. پاسخ «بسته‌شدن تا بسته‌شدن» به این سوال می‌پردازد که «یک دارنده‌ی مستمر، در طول مرز بین دو ماه چه بازدهی را تجربه کرد؟» پاسخ «باز شدن تا بسته‌شدن» به این سوال پاسخ می‌دهد که «معاملات خودِ ماه، برای کسی که در شروع ژوئن خرید کرده، چه بازدهی داشت؟» این دو عدد هر زمان که بازار در مرز بین دو ماه دچار شکاف (gap) شود، با هم متفاوت خواهند بود؛ و شکاف‌های شبانه امری عادی هستند و نه نادر.

سود سهام: بازده قیمت در مقابل بازده کل

گزینه دوم: آیا وجه نقد پرداخت‌شده توسط یک سهم در طول ماه محاسبه می‌شود؟ بازده قیمت (price return) آن را نادیده می‌گیرد؛ اما بازده کل (total return) آن را به محاسبات اضافه می‌کند. در اکثر ماه‌ها، این اختلاف ناچیز است — یک پرداخت‌کننده سه‌ماهانه، تقریباً یک‌چهارم بازده خود را در هر فصل توزیع می‌کند — اما این اختلاف در طول سال‌ها به شکلی فاحش افزایش می‌یابد؛ و ژوئن 2026 دقیقاً ماه پرداخت SPY بود:

پرس‌وجوSPY ژوئن ۲۰۲۶ — price return در مقابل total return (شامل June ex-dividend)
کد دقیق SQL پشت هر عدد
WITH px AS (
    SELECT argMaxIf(cl, day, day <= '2026-05-31') AS may_close,
           argMaxIf(cl, day, day <= '2026-06-30') AS jun_close
    FROM (
        SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS day,
               argMinIf(toFloat64(open), window_start, rth) AS op,
               argMaxIf(toFloat64(close), window_start, rth) AS cl
        FROM (
            SELECT ticker, window_start, open, close,
                   toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
                   AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York') AS rth
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker IN ('NVDA', 'SPY')
              AND window_start >= '2026-05-28 04:00:00'
              AND window_start < '2026-07-01 08:00:00'
        )
        GROUP BY ticker, day
    )
    WHERE ticker = 'SPY'
),
dv AS (
    SELECT sum(cash_amount) AS div_per_share
    FROM global_markets.stocks_dividends
    WHERE ticker = 'SPY'
      AND ex_dividend_date >= '2026-06-01'
      AND ex_dividend_date <= '2026-06-30'
)
SELECT round(may_close, 2) AS may_final_close,
       round(jun_close, 2) AS june_final_close,
       round(div_per_share, 4) AS june_dividend_per_share,
       round(100 * (jun_close - may_close) / may_close, 2) AS price_return_pct,
       round(100 * div_per_share / may_close, 2) AS dividend_contribution_pct,
       round(100 * ((jun_close + div_per_share) - may_close) / may_close, 2) AS total_return_pct
FROM px CROSS JOIN dv

بازده قیمت SPY در ماه ژوئن -1.33% بود؛ با اضافه کردن توزیع 1.9035 دلاری به ازای هر سهم که در آن ماه در وضعیت ex-dividend بود، بازده کل به -1.08% بهبود می‌یابد — یعنی 0.25% از این میزان مربوط به وجه نقد است. خانواده‌های شاخص، هر دو نوع را منتشر می‌کنند (آن "S&P 500" که مشاهده می‌کنید معمولاً شاخص قیمت است)، صفحات عملکرد صندوق‌ها موظف به نمایش بازده کل هستند و ابزارهای غربالگر (screeners) این دو را به صورت آزاد با هم ترکیب می‌کنند. وقتی دو منبع در مورد ماهِ یک شرکت پرداخت‌کننده سود سهام، با اختلاف چند دهم موافق نیستند، سود سهام اولین مظنون است — تاریخ ex-dividend تعیین می‌کند که یک پرداخت به کدام ماه تعلق دارد.

یک ماه ژوئن تنها شامل چند دهم درصد است. تفاوت اصلی در بازه زمانی است؛ در اینجا همان محاسبات در یک بازه پنج ساله آورده شده است:

پرس‌وجوSPY در پنج سال، ژوئن ۲۰۲۱ تا ژوئن ۲۰۲۶ — price return در مقابل بازده با سود نقدی
کد دقیق SQL پشت هر عدد
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
           argMaxIf(toFloat64(close), window_start,
               toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
               AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND ((window_start >= '2021-06-28 04:00:00' AND window_start < '2021-07-01 08:00:00')
        OR (window_start >= '2026-06-26 04:00:00' AND window_start < '2026-07-01 08:00:00'))
    GROUP BY day
),
px AS (
    SELECT argMaxIf(cl, day, day <= '2021-06-30') AS start_close,
           argMaxIf(cl, day, day <= '2026-06-30') AS end_close
    FROM daily
),
dv AS (
    SELECT round(sum(cash_amount), 2) AS divs_per_share,
           count() AS payments
    FROM global_markets.stocks_dividends
    WHERE ticker = 'SPY'
      AND ex_dividend_date >= '2021-07-01'
      AND ex_dividend_date <= '2026-06-30'
)
SELECT round(start_close, 2) AS june_2021_close,
       round(end_close, 2) AS june_2026_close,
       divs_per_share AS dividends_paid_per_share,
       payments AS dividend_payments,
       round(100 * (end_close - start_close) / start_close, 2) AS five_year_price_return_pct,
       round(100 * ((end_close + divs_per_share) - start_close) / start_close, 2) AS five_year_return_with_divs_pct,
       round(100 * divs_per_share / start_close, 2) AS dividend_points_added
FROM px CROSS JOIN dv

از قیمت بسته‌شدن در ژوئن 2021 به میزان 428.07 دلار تا قیمت بسته‌شدن در ژوئن 2026 به میزان 746.32 دلار، بازده قیمت پنج ساله SPY برابر با 74.35% است. در همین بازه، این صندوق توزیعاتی به میزان 20 با مجموع 34.07 دلار به ازای هر سهم پرداخت کرده است؛ محاسبه این وجه نقد، رقم را به 82.3% می‌رساند — یعنی اختلاف 7.96 واحد پیش از بازسرمایه‌گذاری حتی یک سود سهام. یک شاخص بازده کل واقعی، هر پرداخت را در تاریخ ex-date آن بازسرمایه‌گذاری می‌کند و سهام بازسرمایه‌گذاری‌شده، این شکاف را باز هم بیشتر می‌کند. در یک شرکت پرداخت‌کننده بالغ، عبارت "حاشیه سود بزرگ" یک اصطلاح نیست؛ بلکه نتیجه پیش‌فرض سال‌ها پرداخت نقدی سه‌ماهانه است.

قیمت بسته‌شده تعدیل‌شده در مقابل قیمت بسته‌شده خام: تله‌ی تقسیم سهام

بیشتر ابزارهای نموداری — از جمله Yahoo Finance، Google Finance و اکثر اپلیکیشن‌های کارگزاری — قیمت adjusted close را ارائه می‌دهند: یک سری قیمت تاریخی که در آن قیمت‌های گذشته برای لحاظ کردن تقسیم سهام (و در برخی پلتفرم‌ها، برای سود نقدی نیز) تقسیم شده‌اند تا نمودار در طول زمان قابل مقایسه باشد. انبار داده‌های ما، ثبت‌های اصلی بازار را ذخیره می‌کند. در یک ماه عادی، این دو مقدار با هم همخوانی دارند. اما در ماهی که تقسیم سهام رخ می‌دهد، این دو داده روایت‌های کاملاً متفاوتی ارائه می‌دهند؛ مانند تقسیم 10 به 1 سهام NVDA که در تاریخ 10 ژوئن 2024 در این ماه انجام شد:

پرس‌وجوNVDA ژوئن ۲۰۲۴ — محاسبه raw close-to-close در مقابل بازده تعدیل‌شده با split
کد دقیق SQL پشت هر عدد
WITH px AS (
    SELECT argMaxIf(cl, day, day <= '2024-05-31') AS may_close,
           argMaxIf(cl, day, day <= '2024-06-30') AS jun_close
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
               argMaxIf(toFloat64(close), window_start,
                   toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
                   AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'NVDA'
          AND window_start >= '2024-05-29 04:00:00'
          AND window_start < '2024-07-01 08:00:00'
        GROUP BY day
    )
),
sp AS (
    SELECT split_to / split_from AS ratio
    FROM global_markets.stocks_splits
    WHERE ticker = 'NVDA'
      AND execution_date >= '2024-06-01'
      AND execution_date <= '2024-06-30'
)
SELECT round(may_close, 2) AS may_final_close_raw,
       round(jun_close, 2) AS june_final_close_raw,
       toInt32(ratio) AS shares_after_split_per_old_share,
       round(100 * (jun_close - may_close) / may_close, 2) AS raw_price_change_pct,
       round(may_close / ratio, 2) AS may_close_split_adjusted,
       round(100 * (jun_close - may_close / ratio) / (may_close / ratio), 2) AS adjusted_return_pct
FROM px CROSS JOIN sp

با بررسی داده‌های خام، به نظر می‌رسد قیمت NVDA در ژوئن آن سال از $1097.46 به $123.41 رسید که نشان‌دهنده یک سقوط -88.75% است. اما چنین اتفاقی رخ نداده است: در تاریخ اجرای تقسیم، هر سهم قدیمی به 10 سهم جدید تبدیل شد و قیمت نیز متناسب با آن تقسیم شد تا ارزش دلاری دارایی هر سهامدار ثابت بماند. اگر قیمت بسته‌شده در ماه مه را با همان نسبت تقسیم کنید — که در حالت تعدیل‌شده برابر با $109.75 است — ماه ژوئن 2024 میزان 12.45% را نشان می‌دهد که یک ماه مثبت است. هر منبعی که داده‌های تعدیل‌شده را نقل کند، رقمی نزدیک به عدد دوم را گزارش می‌دهد؛ در حالی که محاسبه ساده بر اساس قیمت‌های خام، عدد اول را گزارش می‌کند. قیمت بسته‌شده تعدیل‌شده رایج‌ترین دلیل اختلاف شدید دو منبع در گزارش بازده ماهانه تاریخی است. اگر رقمی در هر دو جهت بیش از حد بزرگ به نظر رسید، پیش از هر چیز تقویم تقسیم سهام را بررسی کنید.

کدام «قیمت پایانی» ملاک است؟

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

پرس‌وجوSPY در ۳۰ ژوئن ۲۰۲۶ — official-close در مقابل آخرین قیمت extended-hours
کد دقیق SQL پشت هر عدد
SELECT round(argMaxIf(toFloat64(close), window_start, rth), 2) AS regular_session_close,
       round(argMax(toFloat64(close), window_start), 2) AS last_extended_print,
       round(100 * (argMax(toFloat64(close), window_start) - argMaxIf(toFloat64(close), window_start, rth))
             / argMaxIf(toFloat64(close), window_start, rth), 3) AS after_hours_drift_pct
FROM (
    SELECT window_start, close,
           toTimeZone(window_start, 'America/New_York') >= toDateTime('2026-06-30 09:30:00', 'America/New_York')
           AND toTimeZone(window_start, 'America/New_York') < toDateTime('2026-06-30 16:00:00', 'America/New_York') AS rth
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= '2026-06-30 04:00:00'
      AND window_start < '2026-07-01 08:00:00'
)

در تاریخ 30 ژوئن، این دو مقدار با -0.003% اختلاف داشتند؛ این اختلاف در آن شب ناچیز بود، اما در شب انتشار گزارش‌های سودآوری یک سهم خاص، جلسات معاملاتی تمدید شده می‌تواند تغییراتی در مقیاس درصد ایجاد کند که بازدهی رسمی ماهانه، آن‌ها را به ماه بعدی نسبت دهد. معاملات پس از بازار و پیش از بازار این مرز را با جزئیات بررسی می‌کند. یک مورد استثنای مرتبط دیگر: مرزهای ماهانه گاهی با جلسات کوتاه‌شده در روزهای تعطیل همزمان می‌شوند؛ در این حالت، روز معاملاتی عادی در ساعت 1:00 بعد از ظهر به ET ختم می‌شود و قیمت رسمی پایانی در یک حراج پایانی زودهنگام ثبت می‌گردد که در جدول تعطیلات بازار فهرست شده است.

محاسبه بازده مرکب دوازده ماهه در یک سال

بازده سالانه حاصل جمع دوازده بازده ماهانه نیست، بلکه حاصل‌ضرب آن‌هاست. فرمول محاسبه به این صورت است: هر ماه را به یک ضریب رشد (1 + بازده) تبدیل کنید، دوازده ضریب را در هم ضرب کنید و سپس عدد 1 را از آن کم کنید. یک ماه با بازده 5-٪ که با یک ماه با بازده 5+٪ دنبال شود، در حالت جمع برابر با صفر می‌شود، اما در حالت مرکب برابر است با: 0.95 × 1.05 − 1 = 0.25-٪. در اینجا مسیر ماهانه واقعی SPY در دوازده ماه منتهی به ژوئن 2026 آورده شده است:

پرس‌وجوبازده‌های ماهانه close-to-close برای SPY — دوازده ماه منتهی به ژوئن ۲۰۲۶، ساده و log
کد دقیق SQL پشت هر عدد
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
           argMaxIf(toFloat64(close), window_start,
               toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
               AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= '2025-06-24 04:00:00'
      AND window_start < '2026-07-01 08:00:00'
    GROUP BY day
),
monthly AS (
    SELECT toStartOfMonth(day) AS month_start,
           argMax(cl, day) AS month_close
    FROM daily
    GROUP BY month_start
),
rets AS (
    SELECT month_start,
           formatDateTime(month_start, '%Y-%m') AS month,
           round(month_close, 2) AS month_final_close,
           100 * (month_close / lagInFrame(month_close) OVER (ORDER BY month_start) - 1) AS r
    FROM monthly
)
SELECT month,
       month_final_close,
       round(r, 2) AS simple_return_pct,
       round(100 * log(1 + r / 100), 2) AS log_return_pct
FROM rets
WHERE isFinite(r)
ORDER BY month_start

دوازده ماه از قیمت بسته‌شدن تا بسته‌شدن، از 2.28% در 2025-07 تا -1.33% در 2026-06 — آخرین ردیف همان رقم SPY ژوئن 2026 است که در پنل اول اندازه‌گیری شد. این دوازده ماه را به درستی به هم متصل کنید و با روش ساده‌ی جمع کردن درصدها مقایسه کنید:

پرس‌وجومجموع در مقابل مرکب — دوازده بازده ماهانه SPY با سه روش پیوند داده شده
کد دقیق SQL پشت هر عدد
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
           argMaxIf(toFloat64(close), window_start,
               toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
               AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= '2025-06-24 04:00:00'
      AND window_start < '2026-07-01 08:00:00'
    GROUP BY day
),
monthly AS (
    SELECT toStartOfMonth(day) AS month_start,
           argMax(cl, day) AS month_close
    FROM daily
    GROUP BY month_start
),
rets AS (
    SELECT month_start,
           100 * (month_close / lagInFrame(month_close) OVER (ORDER BY month_start) - 1) AS r
    FROM monthly
),
ends AS (
    SELECT argMin(month_close, month_start) AS base_close,
           argMax(month_close, month_start) AS final_close
    FROM monthly
)
SELECT count() AS months_linked,
       round(sum(r), 2) AS simple_sum_pct,
       round(100 * (exp(sum(log(1 + r / 100))) - 1), 2) AS geometric_compound_pct,
       round(100 * (any(final_close) / any(base_close) - 1), 2) AS direct_twelve_month_pct,
       round(100 * (exp(sum(log(1 + r / 100))) - 1) - sum(r), 2) AS compounding_gap_points,
       round(sum(100 * log(1 + r / 100)), 2) AS sum_of_monthly_log_returns_pct,
       round(100 * log(any(final_close) / any(base_close)), 2) AS twelve_month_log_return_pct
FROM rets CROSS JOIN ends
WHERE isFinite(r)

مجموع دوازده ماه برابر با 19.83% است اما بازده مرکب آن‌ها 20.79% می‌شود؛ همچنین محاسبه مستقیم از قیمت بسته‌شدن ژوئن 2025 تا ژوئن 2026، رقم 20.79% را نشان می‌دهد که با رقم مرکب مطابقت دارد و نه با حاصل جمع. اختلاف در اینجا در یک سال نسبتاً آرام، 0.96 واحد است؛ این شکاف با افزایش نوسانات و بازه زمانی، بیشتر می‌شود. جمع کردن درصدهای ماهانه یک عادت رایج در استفاده از اکسل است که در واقعیت اشتباه است.

دو ستون آخر، روش مرسوم برای جمع کردن را نشان می‌دهند: بازده لگاریتمی یا همان لگاریتم طبیعی ضریب رشد، ln(1 + return). مجموع بازده‌های لگاریتمی ماهانه برابر با 18.89% است که با بازده لگاریتمی دوازده ماهه یعنی 18.89% یکسان است؛ به همین دلیل است که تحلیل‌گران و مدل‌های ریسک از آن‌ها استفاده می‌کنند. برای ماه‌های با نوسان کم، این دو روش تفاوت ناچیزی دارند (2025-11: 0.21% ساده، 0.21% لگاریتمی)؛ اما هرچه نوسان ماهانه بیشتر باشد، فاصله آن‌ها بیشتر می‌شود (2026-04: 10.49% ساده، 9.97% لگاریتمی). برگه‌های اطلاعاتی صندوق‌ها، بازده ساده را اعلام می‌کنند؛ اما بازده لگاریتمی در مقالات پژوهشی و محاسبات نوسان کاربرد دارد.

چک‌لیستی برای تطبیق هر دو منبع داده

زمانی که دو رقم بازده ماهانه با هم همخوانی ندارند، تقریباً همیشه دلیل آن‌ها یکی از این چهار متغیر است:

  1. نقاط شروع و پایان — از قیمت بسته‌شده تا بسته‌شده (استاندارد) یا از قیمت بازگشایی تا بسته‌شده (معاملات خودِ ماه). در صورت وجود شکاف قیمتی در مرزهای زمانی، این دو متفاوت خواهند بود.
  2. سود نقدی (Dividends) — بازده قیمت یا بازده کل. در هر ماهی که شامل تاریخ Ex-dividend باشد، این دو متفاوت هستند.
  3. تعدیل — قیمت‌های خام یا سری‌های قیمت بسته‌شده‌ی تعدیل‌شده. در هر ماهی که شامل تقسیم سهام (Split) باشد، این دو تفاوت بسیار زیادی دارند.
  4. خودِ قیمت بسته‌شده — قیمت رسمی حراج (استاندارد) در مقابل آخرین معامله که ممکن است شامل ساعات معاملاتی پس از بازار باشد.

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

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

بازده «بسته تا بسته» چیست؟

تغییر درصد از قیمت بسته‌شده در پایان جلسه عادی دوره قبل تا قیمت بسته‌شده در پایان دوره جاری. این روش استاندارد برای محاسبه بازده روزانه، ماهانه و سالانه سهام در برگه‌های اطلاعاتی و گزارش‌های شاخص است.

چرا دو وب‌سایت برای یک سهم و یک ماه مشخص، بازده‌های متفاوتی نشان می‌دهند؟

این تفاوت تقریباً همیشه ناشی از یکی از این چهار مورد است: نقاط شروع و پایان متفاوت (بسته تا بسته در مقابل باز تا بسته)، لحاظ شدن یا نشدن سود نقدی، قیمت‌های خام در مقابل قیمت‌های تعدیل‌شده بر اساس تجزیه سهام، یا استفاده از منابع متفاوت برای قیمت بسته‌شده. در مورد NVDA، تنها با اولین تغییر، معیارهای ژوئن 2026 شامل -5.39% یا -7.4% می‌شوند.

آیا تجزیه سهام (Stock Split) محاسبه بازده ماهانه را تغییر می‌دهد؟

نباید تغییر دهد؛ تجزیه سهام تعداد سهام و قیمت را به‌صورت همزمان تغییر می‌دهد و ارزش کل سرمایه را ثابت نگه می‌دارد، اما هر محاسباتی که بر اساس قیمت‌های خام انجام شده باشد را مختل می‌کند. بازده ژوئن 2024 برای NVDA بر اساس قیمت‌های بسته‌شده خام، مشابه -88.75% به نظر می‌رسد، اما پس از تعدیل تجزیه 10-به-1، مقدار 12.45% را نشان می‌دهد.

آیا بازده ماهانه سهام شامل سود نقدی است؟

فقط «بازده کل» شامل سود نقدی است. بازده قیمت — از جمله سطح شاخص S&P 500 — شامل آن‌ها نمی‌شود. در ژوئن 2026، سود نقدی باعث اضافه شدن 0.25% به بازده ماهانه SPY شد که همان اختلاف بین قیمت و بازده کل است.

آیا بازده ماهانه سبد سهام شخصی من نیز به همین روش محاسبه می‌شود؟*

خیر، به محض ورود یا خروج وجه نقد، روش محاسبه تغییر می‌کند. بازده تک‌سهم‌ها مانند موارد موجود در این صفحه، به صورت «وزن‌دار از نظر زمانی» محاسبه می‌شوند؛ اما حسابی که دارای واریز و برداشت باشد، به محاسبه «وزن‌دار از نظر سرمایه» (نرخ بازده داخلی) نیاز دارد، در غیر این صورت جریان‌های نقدی باعث نمایش نادرست عملکرد می‌شوند. اکثر کارگزاران دقیقاً برای حذف اثر واریزی‌های شما از عدد نهایی، از بازده وزن‌دار از نظر زمانی استفاده می‌کنند.


تمام ارقام فوق، نتایج ذخیره‌شده و نسخه‌بندی‌شده از داده‌های لحظه‌ای بازار هستند — برای مشاهده کد SQL هر پنل یا بررسی بازده ماهانه هر نمادی تحت هر کنوانسیونی، از ترمینال Strasmore استفاده کنید.

#returns#conventions#dividends#splits#education