API للمطورين

إنشاء أداة لأبحاث الأسهم باستخدام حزمة SAHMK Python SDK

برنامج Python يجمع كل ما تحتاجه لتقييم سهم في تداول: ملف الشركة، والصحة المالية، وسجل التوزيعات، وإجماع المحللين، والأحداث الأخيرة، عبر واجهة SAHMK API والحزمة الرسمية.

PythonSDKمتوسطقراءة 10 دقائق

المتطلبات: Python 3.9 فأحدث، ومفتاح SAHMK API (احصل عليه مجاناً)، وباقة Starter أو أعلى للقوائم والتوزيعات، وPro+ للأحداث.

bash
pip install -U sahmk

في عمليات البحث عن الأسعار والشركات عبر SDK، يمكنك تمرير معرّف شركة (الرمز أو الاسم العربي أو الإنجليزي أو الاسم البديل). تظل الرموز مدعومة وهي الأفضل عند التباس الإدخال.

1. ملف الشركة — تعرّف إلى ما تحلله

ابدأ بجلب ملف الشركة. تختلف الاستجابة حسب الباقة: توفر مجاني المعلومات الأساسية، وتضيف Starter المؤشرات الأساسية، بينما تضيف Pro المؤشرات الفنية والتقييم وبيانات المحللين.

company.py
from sahmk import SahmkClient

client = SahmkClient(api_key="your_api_key_here")

company = client.company("2222")

print(f"{company.name_en} ({company.symbol})")
print(f"Type:   {company.security_type}")
print(f"Sector: {company.sector} / {company.industry}")
print(f"Price:  {company.current_price} SAR")
مثال على الاستجابة
Saudi Arabian Oil Co (2222)
Type:   Equity
Sector: Energy / Oil & Gas
Price:  25.64 SAR

المؤشرات الأساسية (Starter+)

bash
if company.fundamentals:
    f = company.fundamentals
    print(f"\nMarket Cap:      {f.market_cap / 1e9:,.0f}B SAR")
    print(f"P/E Ratio:       {f.pe_ratio}")
    print(f"EPS:             {f.eps} SAR")
    print(f"Price/Book:      {f.price_to_book}")
    print(f"Beta:            {f.beta}")
    print(f"52-Week Range:   {f.fifty_two_week_low} – {f.fifty_two_week_high} SAR")
    print(f"Float Shares:    {f.float_shares:,}")
مثال على الاستجابة
Market Cap:      6,258B SAR
P/E Ratio:       16.77
EPS:             1.54 SAR
Price/Book:      4.19
Beta:            0.104
52-Week Range:   23.04 – 27.85 SAR
Float Shares:    5,969,578,000

المؤشرات الفنية والتقييم (Pro+)

bash
if company.technicals:
    t = company.technicals
    print(f"\nRSI (14):        {t.rsi_14}")
    print(f"MACD:            {t.macd_line} (signal: {t.macd_signal})")
    print(f"Direction:       {t.price_direction}")

if company.valuation:
    v = company.valuation
    gap = ((v.fair_price - company.current_price) / company.current_price) * 100
    print(f"\nFair Price:      {v.fair_price} SAR (confidence: {v.fair_price_confidence})")
    print(f"vs Current:      {gap:+.1f}%")

if company.analysts:
    a = company.analysts
    print(f"\nAnalyst Target:  {a.target_mean} SAR (range: {a.target_low}–{a.target_high})")
    print(f"Consensus:       {a.consensus} ({a.num_analysts} analysts)")
مثال على الاستجابة
RSI (14):        55.3
MACD:            0.12 (signal: 0.08)
Direction:       bullish

Fair Price:      28.50 SAR (confidence: 0.85)
vs Current:      +11.1%

Analyst Target:  29.5 SAR (range: 24.0–35.0)
Consensus:       buy (15 analysts)

2. القوائم المالية — تحقّق من الأرقام

اجلب قوائم الدخل والميزانيات والتدفقات النقدية. تعيد الواجهة أحدث الإفصاحات الفصلية.

financials.py
financials = client.financials("2222")

print(f"Financial Statements for {financials.symbol}\n")

# Most recent income statement
if financials.income_statements:
    inc = financials.income_statements[0]
    print(f"Income Statement ({inc.report_date})")
    print(f"  Revenue:      {inc.total_revenue / 1e9:,.0f}B SAR")
    if inc.gross_profit:
        margin = (inc.gross_profit / inc.total_revenue) * 100
        print(f"  Gross Profit: {inc.gross_profit / 1e9:,.0f}B SAR ({margin:.0f}% margin)")
    print(f"  Net Income:   {inc.net_income / 1e9:,.0f}B SAR")

# Most recent balance sheet
if financials.balance_sheets:
    bs = financials.balance_sheets[0]
    print(f"\nBalance Sheet ({bs.report_date})")
    print(f"  Total Assets:  {bs.total_assets / 1e9:,.0f}B SAR")
    print(f"  Equity:        {bs.stockholders_equity / 1e9:,.0f}B SAR")
    print(f"  Total Debt:    {bs.total_debt / 1e9:,.0f}B SAR")

# Most recent cash flow
if financials.cash_flows:
    cf = financials.cash_flows[0]
    print(f"\nCash Flow ({cf.report_date})")
    print(f"  Operating:     {cf.operating_cash_flow / 1e9:,.0f}B SAR")
    print(f"  Free Cash:     {cf.free_cash_flow / 1e9:,.0f}B SAR")
مثال على الاستجابة
Financial Statements for 2222

Income Statement (2025-12-31)
  Revenue:      416B SAR
  Gross Profit: 216B SAR (52% margin)
  Net Income:   69B SAR

Balance Sheet (2025-12-31)
  Total Assets:  2,552B SAR
  Equity:        1,492B SAR
  Total Debt:    364B SAR

Cash Flow (2025-12-31)
  Operating:     153B SAR
  Free Cash:     103B SAR

الاتجاه الفصلي

بما أن الواجهة تعيد عدة فصول، يمكنك عرض الاتجاه بسهولة:

bash
print("Revenue Trend (Quarterly)")
for inc in financials.income_statements:
    bar = "█" * int(inc.total_revenue / 1e10)
    print(f"  {inc.report_date}: {inc.total_revenue / 1e9:>6,.0f}B  {bar}")
مثال على الاستجابة
Revenue Trend (Quarterly)
  2025-12-31:    416B  █████████████████████████████████████████
  2025-09-30:    418B  █████████████████████████████████████████
  2025-06-30:    407B  ████████████████████████████████████████
  2025-03-31:    430B  ██████████████████████████████████████████

3. تحليل التوزيعات — تتبّع العائد

تُعد التوزيعات مهمة للمستثمرين الباحثين عن الدخل. توفر الحزمة العائد اللاحق والدفعات القادمة والسجل الكامل.

dividends.py
divs = client.dividends("2222")

print(f"Dividends for {divs.symbol}")
print(f"  Current Price:       {divs.current_price} SAR")
print(f"  Trailing 12M Yield:  {divs.trailing_12m_yield}%")
print(f"  Trailing 12M Total:  {divs.trailing_12m_dividends} SAR/share")
print(f"  Payments Last Year:  {divs.payments_last_year}")

التوزيعات القادمة

bash
if divs.upcoming:
    print("\nUpcoming Distributions:")
    for u in divs.upcoming:
        print(f"  {u.period}: {u.value} SAR/share")
        print(f"    Eligibility: {u.eligibility_date}")
        print(f"    Payment:     {u.distribution_date}")

سجل الدفعات

bash
if divs.history:
    print("\nPayment History:")
    for h in divs.history[:4]:
        print(f"  {h.period} {h.fiscal_year}: {h.value} SAR ({h.value_percent}%) — paid {h.distribution_date}")
مثال على الاستجابة
Dividends for 2222
  Current Price:       25.64 SAR
  Trailing 12M Yield:  4.2%
  Trailing 12M Total:  1.60 SAR/share
  Payments Last Year:  4

Upcoming Distributions:
  Q4: 0.40 SAR/share
    Eligibility: 2026-03-15
    Payment:     2026-04-01

Payment History:
  Q3 2025: 0.40 SAR (1.5%) — paid 2025-10-01
  Q2 2025: 0.40 SAR (1.5%) — paid 2025-07-01
  Q1 2025: 0.40 SAR (1.5%) — paid 2025-04-01
  Q4 2024: 0.40 SAR (1.5%) — paid 2025-01-01

4. أحداث السهم — ماذا يحدث؟

تعيد نقطة نهاية الأحداث ملخصات مولدة بالذكاء الاصطناعي للأحداث الجوهرية — الأرباح والتوزيعات وتغييرات الإدارة وغيرها. تتطلب باقة Pro+.

events.py
events = client.events(symbol="2222", limit=5)

print(f"Recent Events ({events.count} total)\n")
for e in events.events:
    sentiment_icon = {"positive": "↑", "negative": "↓", "neutral": "→"}.get(e.sentiment, "•")
    print(f"  {sentiment_icon} [{e.event_type}] {e.importance}")
    print(f"    {e.description}")
    print(f"    {e.article_date}\n")
مثال على الاستجابة
Recent Events (3 total)

  ↑ [FINANCIAL_REPORT] important
    أرامكو تعلن عن نتائج مالية قياسية للربع الرابع 2025 مع نمو أرباح بنسبة 13%
    2026-01-29T17:10:06+00:00

  ↑ [DIVIDEND_ANNOUNCEMENT] important
    مجلس إدارة أرامكو يوصي بتوزيع أرباح نقدية بقيمة 0.40 ريال للسهم
    2026-01-15T09:00:00+00:00

يمكنك أيضاً جلب جميع أحداث السوق (احذف symbol):

bash
all_events = client.events(limit=20)
print(f"Available event types: {all_events.available_types}")

5. جمع النتائج — تقرير بحثي

إليك برنامجاً كاملاً ينشئ ملخصاً بحثياً من صفحة واحدة لأي معرّف شركة:

research.py
from sahmk import SahmkClient, SahmkError

client = SahmkClient(api_key="your_api_key_here")

SYMBOL = "2222"

def research(symbol):
    company = client.company(symbol)
    print(f"{'=' * 60}")
    print(f"  {company.name_en} ({company.symbol})")
    print(f"  {company.sector} / {company.industry}")
    print(f"  Price: {company.current_price} SAR")
    print(f"{'=' * 60}")

    if company.fundamentals:
        f = company.fundamentals
        print(f"\n  P/E: {f.pe_ratio}  |  EPS: {f.eps}  |  Beta: {f.beta}")
        print(f"  52W: {f.fifty_two_week_low}–{f.fifty_two_week_high} SAR")

    if company.valuation:
        v = company.valuation
        gap = ((v.fair_price - company.current_price) / company.current_price) * 100
        label = "undervalued" if gap > 0 else "overvalued"
        print(f"  Fair Price: {v.fair_price} SAR ({gap:+.0f}% — {label})")

    if company.analysts:
        a = company.analysts
        print(f"  Consensus: {a.consensus.upper()} | Target: {a.target_mean} SAR ({a.num_analysts} analysts)")

    try:
        divs = client.dividends(symbol)
        print(f"\n  Dividend Yield: {divs.trailing_12m_yield}% trailing")
        if divs.upcoming:
            u = divs.upcoming[0]
            print(f"  Next Payment:   {u.value} SAR on {u.distribution_date}")
    except SahmkError:
        pass

    try:
        fin = client.financials(symbol)
        if fin.income_statements:
            inc = fin.income_statements[0]
            print(f"\n  Latest Revenue:    {inc.total_revenue / 1e9:,.0f}B SAR ({inc.report_date})")
            print(f"  Latest Net Income: {inc.net_income / 1e9:,.0f}B SAR")
        if fin.cash_flows:
            cf = fin.cash_flows[0]
            print(f"  Free Cash Flow:    {cf.free_cash_flow / 1e9:,.0f}B SAR")
    except SahmkError:
        pass

    try:
        events = client.events(symbol=symbol, limit=3)
        if events.events:
            print(f"\n  Recent Events:")
            for e in events.events:
                print(f"    [{e.event_type}] {e.description[:80]}")
    except SahmkError:
        pass

    print(f"\n{'=' * 60}")


research(SYMBOL)
مثال على الاستجابة
============================================================
  Saudi Arabian Oil Co (2222)
  Energy / Oil & Gas
  Price: 25.64 SAR
============================================================

  P/E: 16.77  |  EPS: 1.54  |  Beta: 0.104
  52W: 23.04–27.85 SAR
  Fair Price: 28.50 SAR (+11% — undervalued)
  Consensus: BUY | Target: 29.5 SAR (15 analysts)

  Dividend Yield: 4.2% trailing
  Next Payment:   0.40 SAR on 2026-04-01

  Latest Revenue:    416B SAR (2025-12-31)
  Latest Net Income: 69B SAR
  Free Cash Flow:    103B SAR

  Recent Events:
    [FINANCIAL_REPORT] أرامكو تعلن عن نتائج مالية قياسية للربع الرابع 2025 مع نمو أرباح بنسبة 13%
    [DIVIDEND_ANNOUNCEMENT] مجلس إدارة أرامكو يوصي بتوزيع أرباح نقدية بقيمة 0.40 ريال للسهم

============================================================

غيّر SYMBOL to أي معرّف مدعوم وشغّل البرنامج نفسه. إذا التبس البحث، فاستخدم رمز السوق.

6. نصائح

  • →نماذج منضبطة الأنواع في كل مكان: تعيد جميع دوال الحزمة كائنات منضبطة الأنواع. استخدم الإكمال التلقائي في بيئة التطوير لاستكشاف الحقول المتاحة.
  • →التراجع المرن: قد تكون بعض الحقول None بحسب باقتك. تحقّق دائماً قبل استخدام حقول Pro أو Starter.
  • →معالجة الأخطاء: ضع الاستدعاءات داخل try/except SahmkError — لن تتعطل الحزمة عند نقاط النهاية المقيدة بالباقة، لكنها ستطلق خطأ واضحاً.
  • →.raw للتصدير: تحتوي كل استجابة على .raw قاموس مفيد للحفظ في JSON أو قواعد البيانات أو التمرير إلى الواجهات.

ما الخطوة التالية

  • →التحليل التاريخي: استخدم client.historical() لبيانات OHLCV وبناء مخططات الأسعار
  • →بث WebSocket: استخدم client.stream() لتحديثات الأسعار الفورية
  • →اختصار CLI: شغّل sahmk company 2222 أو sahmk financials 2222 من الطرفية
  • →مقارنة الأسهم: شغّل دالة البحث في حلقة على عدة رموز

المصادر

هل أنت جاهز للتعمق؟

توفر حزمة SAHMK كل شيء من الأسعار السريعة إلى التحليل الأساسي الكامل. ابدأ بالباقة المجانية ثم رقِّها عند حاجتك إلى القوائم المالية والتوزيعات والبيانات الفورية.

نشر بواسطة @sahmk_sa · مرخّص من تداول السعودية