Skip to main content

Oxtapus 1.1

Tests PyPI downloads Supported Python versions Package version

Oxtapus یه بسته توسعه نرم‌افزاری (SDK) پایتون تایپ‌شده و مبتنی بر Polars برای داده‌های بازار مالی ایرانه. شاخهٔ 1.x با یه معماری و رابط برنامه‌نویسی (API) کاملاً تازه ساخته شده؛ یعنی هم برای کارهای سریع داخل نوت‌بوک جمع‌وجوره و هم زیرِ همین ظاهر ساده، سرویس‌های تایپ‌شده، قراردادهای مشخص برای فراهم‌کننده‌ها، انتقال مقاوم HTTPX2 و خط لوله داده قابل‌بازپخش داره تا توی پروژه‌های بزرگ‌تر هم بشه روش حساب کرد.

با Oxtapus می‌تونی به داده‌های عمومی منتشرشده در TSETMC برای بورس اوراق بهادار تهران (بورس تهران) و بازار سرمایه ایران دسترسی داشته باشی. این پروژه مستقل و غیررسمیه و هیچ وابستگی یا تأییدی از طرف TSETMC نداره.

تاریخچهٔ قیمت دلار آزاد، دلار نیما، یورو، سکه امامی و نیم‌سکه هم از TGJU در دسترسه. اتصال TGJU بر اساس موافقت‌نامهٔ کتبی نگه‌دارندهٔ پروژه پیاده شده؛ کاربران پایین‌دستی همچنان باید شرایط استفادهٔ منبع را برای کاربرد خودشان بررسی کنند.

به زبان ساده، اگه دنبال یه کتابخونه پایتون برای دریافت و پردازش داده‌های TSETMC و بورس تهران هستی، Oxtapus دقیقاً برای همین کار ساخته شده.

حواست باشه سایت‌های منبع ممکنه هر لحظه و بدون اطلاع قبلی تغییر کنن. Oxtapus اطلاعات منبع و نسخه طرح‌واره رو ثبت می‌کنه، ولی در دسترس‌بودن همیشگی منبع یا اجازه بازنشر داده‌ها رو تضمین نمی‌کنه. اگه استفاده تجاری داری، حتماً اول اطلاعیه منابع داده رو بخون.

نصب

برای نصب معمولی این دستور رو اجرا کن:

python -m pip install oxtapus

نسخه‌های 3.11 تا 3.14 پایتون پشتیبانی می‌شن. اگه یکپارچه‌سازی‌های اختیاری رو هم می‌خوای، باید موقع نصب مشخصشون کنی:

python -m pip install 'oxtapus[arrow,pandas,duckdb,http2]'

شروع سریع پنج‌دقیقه‌ای

برای گرفتن قیمت‌های روزانه چند نماد، همین چند خط کافیه:

import oxtapus as ox

prices = ox.daily_prices(
    symbols=["فولاد", "خودرو"],
    start="۱۴۰۳/۱۰/۱۲",
    end="۱۴۰۴/۱۰/۱۱",
    progress=True,
)

print(prices.select("symbol", "trading_date", "close_price"))

برای گرفتن تاریخچهٔ دلار یا سکه هم فقط اسم دارایی رو بده:

usd = ox.asset_history("دلار", start="۱۴۰۲/۱۰/۱۱")
nima = ox.asset_history("دلار نیما")
eur = ox.asset_history("یورو")
emami = ox.asset_history("سکه امامی")
half = ox.asset_history("نیم‌سکه")

start و end اختیاری‌ان. تاریخ شمسی رو می‌تونی با رقم فارسی، عربی یا انگلیسی و در قالب‌های YYYY-MM-DD، YYYY/MM/DD، YYYY.MM.DD یا YYYYMMDD بدی. Oxtapus با jdatetime اون رو به میلادی تبدیل می‌کنه؛ تاریخ میلادی ISO هم پذیرفته می‌شه. ورودی نامعتبر، همراه با همون مقدار واردشده و قالب‌های مجاز خطا می‌ده.

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

اگه قراره چند بار درخواست بفرستی، بهتره یه کلاینت Client بسازی و همون رو نگه داری:

from oxtapus import Client, Settings

settings = Settings(concurrency=4, requests_per_second=2, progress=True)
with Client(settings) as client:
    snapshot = client.market.market_watch(["equity", "etf"])
    quote = client.market.quote("فولاد")
    order_book = client.market.market_depth("فولاد")
    activity = client.market.investor_activity("فولاد")
    identity = client.instruments.identity("فولاد")
    board = client.governance.board_members("فولاد")
    result = client.market.fetch_daily_prices(["فولاد", "خودرو"])

print(result.failures)
print(result.lineage.to_dict())

نسخه ناهمگام (async) واقعی هم مستقیم با await سطح بالای Jupyter کار می‌کنه:

from oxtapus import AsyncClient

async with AsyncClient() as client:
    prices = await client.market.daily_prices(["فولاد", "خودرو"])

Oxtapus خودش حلقه رویداد (event loop) رو راه نمی‌اندازه، تودرتو نمی‌کنه، از نو اجرا نمی‌کنه و دستکاریش هم نمی‌کنه.

رابط عمومی

از پکیج اصلی عمداً فقط کلاینت‌ها، تنظیمات، نتیجه‌ی پیشرفته و میان‌برهای دیتاست‌های عمومی مثل daily_prices، market_watch، quote، market_depth، investor_activity، instrument_search، instrument_info، instrument_identity، board_members و option_chain و asset_history در دسترس مستقیم هستن. کلاس‌های داخلی فراهم‌کننده‌ها بخشی از رابط عمومی نیستن.

معماری

flowchart LR
    API[Notebook API / Client / CLI] --> APP[Application services]
    APP --> PORT[Provider and storage ports]
    PORT --> TS[TSETMC provider]
    PORT --> TG[TGJU provider]
    TS --> HTTP[HTTPX2 transport]
    TG --> HTTP
    APP --> B[Bronze raw evidence]
    B --> S[Silver canonical]
    S --> G[Gold curated]
    S --> PQ[Parquet / Memory]
    G --> PQ
    PQ --> DB[Optional DuckDB]

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

توسعه پروژه

برای آماده‌کردن محیط توسعه و اجرای همه بررسی‌ها از این دستورها استفاده کن:

uv sync --all-extras --group dev
uv run ruff format --check .
uv run ruff check .
uv run pyright
uv run pytest -m "not live"
uv run lint-imports
uv run sphinx-build -W --keep-going -b html docs docs/_build/html
uv build

تست‌های معمولی کاملاً آفلاین اجرا می‌شن. تست‌های زنده اختیاری‌ان و با pytest -m live اجرا می‌شن.

حمایت از پروژه

اگه Oxtapus کارت رو راحت‌تر کرده و دوست داری توسعه متن‌بازش ادامه پیدا کنه، می‌تونی از پروژه حمایت کنی.

حمایت از Oxtapus

مجوز

کد منبع Oxtapus با مجوز MIT منتشر شده. قوانین استفاده از داده‌های دریافتی جداست و به منبع اصلی هر داده بستگی داره.

Release files for oxtapus 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oxtapus 1.1.0
File Size Uploaded
oxtapus-1.1.0.tar.gz 109.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for oxtapus 1.1.0
File Interpreter ABI Platform
oxtapus-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 224.8 kB

Release files / oxtapus-1.1.0.tar.gz

Download URL oxtapus-1.1.0.tar.gz
Size 109.5 kB
Tags Source
SHA-256 checksum
How to use checksums
77095bd20dd630af9306af71336826db58cc35310cce8422560f2e6eb822d620
BLAKE2b-256 checksum
How to use checksums
857ba26ad8ec133d43291f0d0bce874a4d9039bfc925e5b3f44c4d9029dd22a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / oxtapus-1.1.0-py3-none-any.whl

Download URL oxtapus-1.1.0-py3-none-any.whl
Size 115.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0618ebaafda1640189386d3282d195c1248705e8baa2d6ddacf0a9ddfe5b8ac8
BLAKE2b-256 checksum
How to use checksums
8bae9de505545018782b351910ffbf7b04451b027c34f88d4066086ccb2cc84c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

1.2.0

2 release files

1.1.1

2 release files

This release

1.1.0 This release

2 release files

1.0.0

2 release files

0.4.1

1 release file

0.4.0

1 release file

0.3.11

1 release file

0.3.10

1 release file

0.3.9

1 release file

0.3.8

1 release file

0.3.6

1 release file

0.3.5

1 release file

0.3.4

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.18

2 release files

0.2.17

1 release file

0.2.16

1 release file

0.2.15

1 release file

0.2.13

1 release file

0.2.12

1 release file

0.2.11

1 release file

0.2.10

1 release file

0.2.9

1 release file

0.2.8

1 release file

0.2.7

1 release file

0.2.6

1 release file

0.2.5

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page