{"slug":"monthly-dividend-stocks","qid":"high_yield_watch","label":"Monthly payers yielding above 12% - the price move and the payment move behind the number","post_title":"Monthly Dividend Stocks: The Full List","post_url":"/blog/monthly-dividend-stocks#q-high_yield_watch","columns":["ticker","annual_yield_pct","price_change_12m_pct","payment_change_12m_pct","avg_daily_traded_musd"],"rows":[{"ticker":"EARN","annual_yield_pct":21.6,"price_change_12m_pct":-24.3,"payment_change_12m_pct":0,"avg_daily_traded_musd":1.6},{"ticker":"PSEC","annual_yield_pct":18.1,"price_change_12m_pct":-19.9,"payment_change_12m_pct":-22.2,"avg_daily_traded_musd":7.9},{"ticker":"ORC","annual_yield_pct":17.92,"price_change_12m_pct":-5.4,"payment_change_12m_pct":-16.7,"avg_daily_traded_musd":26.1},{"ticker":"ARR","annual_yield_pct":17.62,"price_change_12m_pct":7.9,"payment_change_12m_pct":0,"avg_daily_traded_musd":47.3},{"ticker":"CION","annual_yield_pct":16.35,"price_change_12m_pct":-31.5,"payment_change_12m_pct":-72.2,"avg_daily_traded_musd":3.5},{"ticker":"SAR","annual_yield_pct":16.31,"price_change_12m_pct":-27.6,"payment_change_12m_pct":0,"avg_daily_traded_musd":2.2},{"ticker":"DX","annual_yield_pct":15.59,"price_change_12m_pct":4.8,"payment_change_12m_pct":0,"avg_daily_traded_musd":56.2},{"ticker":"HRZN","annual_yield_pct":14.84,"price_change_12m_pct":-29.3,"payment_change_12m_pct":-45.5,"avg_daily_traded_musd":2.8},{"ticker":"AGNC","annual_yield_pct":13.2,"price_change_12m_pct":11.6,"payment_change_12m_pct":0,"avg_daily_traded_musd":167},{"ticker":"PFLT","annual_yield_pct":13.02,"price_change_12m_pct":-27.6,"payment_change_12m_pct":-22,"avg_daily_traded_musd":6.8},{"ticker":"PNNT","annual_yield_pct":12.89,"price_change_12m_pct":-48.3,"payment_change_12m_pct":-50,"avg_daily_traded_musd":1.8}],"shape":"table","sql":"WITH monthly AS (\n    SELECT ticker,\n           argMax(cash_amount, ex_dividend_date) AS latest_payment,\n           argMin(cash_amount, ex_dividend_date) AS oldest_payment\n    FROM global_markets.stocks_dividends\n    WHERE ex_dividend_date > today() - 400\n      AND ex_dividend_date <= today()\n      AND cash_amount > 0\n      AND distribution_type = 'recurring'\n      AND ticker NOT IN ('SPCX')\n      AND ticker NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')\n      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits\n                         WHERE execution_date BETWEEN today() - 400 AND today())\n    GROUP BY ticker\n    HAVING countIf(ex_dividend_date > today() - 365) BETWEEN 10 AND 14\n       AND argMax(frequency, ex_dividend_date) = 12\n       AND oldest_payment > 0\n),\nfilers AS (\n    SELECT ticker\n    FROM global_markets.stocks_ratios\n    GROUP BY ticker\n    HAVING argMax(market_cap, date) > 0\n),\ntape AS (\n    SELECT ticker,\n           toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n           sum(toFloat64(close) * volume) AS dollar_vol,\n           argMax(toFloat64(close), window_start) AS close_px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN (SELECT ticker FROM monthly)\n      AND (window_start >= toDateTime(today() - 32)\n           OR (window_start >= toDateTime(today() - 378) AND window_start < toDateTime(today() - 358)))\n      AND toDate(toTimeZone(window_start, 'America/New_York')) < today()\n      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60\n          + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570\n      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60\n          + toMinute(toTimeZone(window_start, 'America/New_York')) < 960\n    GROUP BY ticker, d\n),\npx AS (\n    SELECT ticker,\n           avgIf(dollar_vol, d > today() - 32) AS adv_usd,\n           argMaxIf(close_px, d, d > today() - 32) AS last_close,\n           argMaxIf(close_px, d, d <= today() - 358) AS close_year_ago,\n           countIf(d > today() - 32) AS recent_sessions,\n           countIf(d <= today() - 358) AS old_sessions\n    FROM tape\n    GROUP BY ticker\n    HAVING recent_sessions >= 15\n       AND old_sessions > 0\n       AND adv_usd >= 1000000\n       AND last_close > 0\n       AND close_year_ago > 0\n)\nSELECT m.ticker AS ticker,\n       round(100 * m.latest_payment * 12 / p.last_close, 2) AS annual_yield_pct,\n       round(100 * (p.last_close - p.close_year_ago) / p.close_year_ago, 1) AS price_change_12m_pct,\n       round(100 * (m.latest_payment - m.oldest_payment) / m.oldest_payment, 1) AS payment_change_12m_pct,\n       round(p.adv_usd / 1e6, 1) AS avg_daily_traded_musd\nFROM monthly m\nINNER JOIN px p ON p.ticker = m.ticker\nINNER JOIN filers f ON f.ticker = m.ticker\nWHERE 100 * m.latest_payment * 12 / p.last_close >= 12\nORDER BY annual_yield_pct DESC\nLIMIT 25","computed_at":"2026-08-22T04:17:06.726495+00:00","elapsed":8.551635444}