Giter Club home page Giter Club logo

pytse-client's Introduction

دریافت اطلاعات بازار بورس تهران

Test Language grade: Python Discord Chat

با استفاده از pytse client میتونید به دیتای بازار بورس تهران در پایتون دسترسی داشته باشید. هدف حل مشکلات گرفتن اطلاعات بروز از سایت بازار بورس تهران هست.

میخواید مشارکت کنید؟

لطفا این صفحه رو مطالعه کنید

قابلیت‌ها

  • دریافت اطلاعات تاریخی به صورت تعدیل‌شده و تعدیل نشده برای نمادها
  • دریافت اطلاعات لحظه نمادها
  • دریافت اطلاعات تاریخی شاخص‌های مالی
  • قابلیت گرفتن اطلاعات یک سهم مانند گروه سهم و اطلاعات معاملات حقیقی و حقوقی
  • دریافت اطلاعات فاندامنتال یک نماد شامل (EPS ,P/E و حجم مبنا)
  • دریافت اطلاعات سهامداران عمده
  • دریافت آمارهای کلیدی مربوط به فیلترنویسی برای نمادها
  • دریافت ریزمعاملاتی آخرین روز معاملاتی نمادها
  • دریافت orderbook با پنج مظنه برتر

نصب

pip install pytse-client

نصب آخرین نسخه در حال توسعه

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

pip install git+https://github.com/Glyphack/pytse-client.git

نحوه استفاده

دانلود سابقه سهم ها

با استفاده از این تابع می‌توان سابقه سهام رو دریافت کرد و هم اون رو ذخیره و هم توی کد استفاده کرد

import pytse_client as tse

tickers = tse.download(symbols="all", write_to_csv=True)
print(tickers["ولملت"])  # history

# Output
            date     open     high  ...     volume  count    close
0     2009-02-18   1050.0   1050.0  ...  330851245    800   1050.0
1     2009-02-21   1051.0   1076.0  ...  335334212   6457   1057.0
2     2009-02-22   1065.0   1074.0  ...    8435464    603   1055.0
3     2009-02-23   1066.0   1067.0  ...    8570222    937   1060.0
4     2009-02-25   1061.0   1064.0  ...    7434309    616   1060.0
...          ...      ...      ...  ...        ...    ...      ...
2323  2020-04-14   9322.0   9551.0  ...  105551315  13536   9400.0
2324  2020-04-15   9410.0   9815.0  ...  201457026  11322   9815.0
2325  2020-04-18  10283.0  10283.0  ...  142377245   8929  10283.0
2326  2020-04-19  10797.0  10797.0  ...  292985635  22208  10380.0
2327  2020-04-20  10600.0  11268.0  ...  295590437  16313  11268.0

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

همچنین با گذاشتن write_to_csv=True سابقه سهم توی فایلی با نماد سهم نوشته میشه

سابقه سهم در قالب Dataframe است

در صورتی که می‌خواهید تاریخ شمسی به خروجی اضافه شود می‌توانید با گذاشتن include_jdate=True این امکان را فراهم کنید

برای دریافت قیمت‌های تعدیل شده از adjust=True استفاده کنید

import pytse_client as tse

tse.download(symbols="وبملت", write_to_csv=True)
tse.download(symbols="وبملت", write_to_csv=True, include_jdate=True)
tse.download(symbols=["وبملت", "ولملت"], write_to_csv=True)

دانلود سابقه شاخص های مالی

برای دانلود سابقه شاخص های بازار که از طریق این لینک می توانید لیست نام آن ها را ملاحظه کنید کافی است اسم شاخص در بخش ‍‍ `symbols` وارد کنید.

همینطور در صورتی که علاقه داشته باشید دیتای مربوط به همه شاخص ها را دریافت کنید کافی است که در برابر کلید symbols رشته "all" وارد کنید.

چند نمونه از دریافت داده‌های شاخصی را می‌توانید در پایین مشاهده کنید.

from pytse_client.download import download_financial_indexes

download_financial_indexes(symbols="all", write_to_csv=True, base_path="hello")


download_financial_indexes(symbols=["شاخص قيمت 50 شركت", "فني مهندسي"], write_to_csv=True, include_jdate=True)

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

این کلاس مشابه با کلاس Ticker طراحی شده است.

tse.FinancialIndex(symbol="شاخص کل").history
tse.FinancialIndex(symbol="شاخص کل").intraday_price
tse.FinancialIndex(symbol="شاخص کل").low
tse.FinancialIndex(symbol="شاخص کل").high
tse.FinancialIndex(symbol="شاخص کل").last_value
tse.FinancialIndex(symbol="شاخص کل").last_update
به این موضوع توجه داشته باشید که دیتای دریافتی حاوی مقدار `OHLCV` است به همراه `date` و `jdate` در صورت نیاز شما می‌باشد.

دانلود تاریخچه orderbook

tse.get_orderbook(
    symbol_name,
    start_date,
    end_date=None,
    to_csv=False,
    base_path=None,
    ignore_date_validation=False,
    diff_orderbook=False,  # faster to process but only stores the difference
    async_requests=True,
)

در بالا مقادیر دیفالت تابع را مشاهده می‌کنید.

ورودی ignore_date_validation=True برای وقتی است که از اینکه روز شروع و پایان حتما روز معاملاتی هستند اطمینان ندارید.

ورودی diff_orderbook=True برای زمانی است که میخواهید خروجی تا حد امکان خام‌تری دریافت کنید. این خروجی سریع‌تر دریافت می‌شود. دیتافریم خروجی فقط شامل تغییرات orderbook است و در یک لحظه مشخص صراحتا وضعیت آن را مشخص نمیکند.

برای متوالی گرفتن و حذف آپشن async میتوانید async_requests=False قرار دهید ولی توجه داشته باشید سرعت دریافت داده ها کاهش می‌یابد.

symbol = "خساپا"
start_date = datetime.date(2023, 3, 1)
end_date = datetime.date(2023, 4, 4)

df_dict = get_orderbook(
        symbol,
        start_date=start_date,
        end_date=end_date,
        diff_orderbook=False,
        ignore_date_validation=True,
        to_csv=True,
        async_requests=True,
    )

فرمت خروجی یک دیکشنری با key تاریخ روز و value دیتافریم آن روز است.

دانلود تاریخچه جزئیات معاملات

این تابع جزئیات معاملات را برای یک نماد و محدوده تاریخی مشخص شده بازیابی می‌کند. این امکان را به شما می‌دهد تا اطلاعات را در بازه زمانی مشخص شده به صورت مجموعه‌ای از فریم‌های داده Pandas دریافت کنید و این نتایج را به صورت فایل‌های CSV ذخیره کنید. با استفاده از این تابع می‌توانید داده‌های بازار را به شکل timeframe درون‌روزانه یا tick data دریافت کنید. پارامترها

symbol_name (str): نام نماد برای دریافت جزئیات معاملات.
start_date (datetime.date): تاریخ شروع جزئیات معاملات.
end_date (Optional[datetime.date]): تاریخ پایان جزئیات معاملات. اگر ارائه نشود، تاریخ شروع استفاده می‌شود.
to_csv (bool): نشان می‌دهد که آیا نتایج به صورت فایل‌های CSV ذخیره شوند یا خیر. پیش‌فرض False است.
base_path (Optional[str]): مسیر پایه که فایل‌های CSV در آن ذخیره می‌شوند. اگر ارائه نشود، مسیر کنونی استفاده می‌شود.
timeframe (Optional[str]): بازه زمانی برای تجمیع داده‌ها. گزینه‌های معتبر شامل "30s"، "1m"، "5m"، "10m"، "15m"، "30m" و "1h" هستند. پیش‌فرض None است که به معنی دریافت tick data است.
aggregate (bool): نشان می‌دهد آیا داده‌ها را به یک DataFrame تجمیع شوند یا خیر. پیش‌فرض False است.

نمونه استفاده:

import pytse_client as tse
from datetime import date

start_date = date(2023, 3, 19)
end_date = date(2023, 4, 22)
symbol = "اهرم"

df = tse.get_trade_details(
    symbol, start_date, end_date, to_csv=True, aggregate=True, timeframe='1m'
)

دانلود سابقه معاملات حقیقی و حقوقی به صورت مجزا

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

from pytse_client import download_client_types_records

if __name__ == '__main__':
    records_dict = download_client_types_records("all")
    print(records_dict["فولاد"])

# Output
date         individual_buy_count  ... individual_ownership_change

2020-09-01                36298  ...                   -691857.0
2020-08-31                58185  ...                  83789408.0
2020-08-26                  461  ...                  21647730.0
2020-08-25                 1248  ...                  14716846.0
2020-08-24                38291  ...                -238454702.0
...                         ...  ...                         ...
2008-12-02                    7  ...                    -10000.0
2008-12-01                    8  ...                         0.0
2008-11-30                   10  ...                    -12781.0
2008-11-29                  116  ...                   4596856.0
2008-11-26                   14  ...                    -20000.0

[2518 rows x 17 columns]

مشابه تابع قبلی می‌توان نتایج را ذخیره کرد

from pytse_client import download_client_types_records

if __name__ == '__main__':
    # Records are saved as a .csv file with the same name of ticer's
    records = download_client_types_records("فولاد", write_to_csv=True)

ماژول Ticker

این ماژول برای کار با دیتای یک سهم خاص هست و با گرفتن نماد اطلاعات موجود رو میده

برای مثال:

import pytse_client as tse

tse.download(symbols="نوری", write_to_csv=True)  # optional
ticker = tse.Ticker("نوری")

print(ticker.history)  # سابقه قیمت سهم
print(ticker.client_types)  # حقیقی حقوقی
print(ticker.title)  # نام شرکت
پتروشيمي نوري (نوري)
print(ticker.url)  # آدرس صفحه سهم
http://tsetmc.com/Loader.aspx?ParTree=151311&i=19040514831923530
print(ticker.group_name)  # نام گروه
محصولات شيميايي
print(ticker.fiscal_year)  # سال مالی
12/29
print(ticker.eps)  # EPS
16442.0
print(ticker.p_e_ratio)  # P/E
6.705388638851721
print(ticker.group_p_e_ratio)  # group P/E
8.24
print(ticker.nav)  # NAV خالص ارزش دارایی‌ها ویژه صندوق‌ها می‌باشد
112,881
print(ticker.nav_date)  # last date of NAV تاریخ بروزرسانی خالص ارزش دارایی‌ها ویژه صندوق‌ها می‌باشد
1400/7/25 13:58:00
print(ticker.psr)  # PSR این نسبت ویژه شرکت‌های تولیدی است
71483.0238888889
print(ticker.p_s_ratio)  # P/S این نسبت ویژه شرکت‌های تولیدی است
1.5423242331125966
print(ticker.base_volume)  # حجم مبنا
918780.0
print(ticker.state)  # وضعیت نماد
مجاز
print(ticker.last_price)  # آخرین معامله
109940
print(ticker.adj_close)  # قیمت پایانی
110250
print(ticker.yesterday_price)  # قیمت دیروز
106800
print(ticker.open_price)  # قیمت اولین معامله
108200
print(ticker.high_price)  # قیمت حداکثر
111830
print(ticker.low_price)  # قیمت حداقل
108200
print(ticker.count)  # تعداد معاملات
3934
print(ticker.volume)  # حجم معاملات
2602437
print(ticker.value)  # ارزش معاملات
286919407590
print(ticker.last_date)  # تاریخ آخرین اطلاعات قیمت پایانی ناشی از تغییرات شرکتی و معاملات
2021-11-01 12:29:54
print(ticker.flow)  # عنوان بازار
بورس
print(ticker.sta_max)  # حداکثر قیمت مجاز
115760.0
print(ticker.sta_min)  # حداقل قیمت مجاز
104740.0
print(ticker.min_week)  # حداقل قیمت هفته اخیر
104500.0
print(ticker.max_week)  # حداکثر قیمت هفته اخیر
111830.0
print(ticker.min_year)  # حداقل قیمت بازه سال
48320.0
print(ticker.max_year)  # حداکثر قیمت بازه سال
197000.0
print(ticker.month_average_volume)  # میانگین حجم ماه
3865804
print(ticker.float_shares)  # درصد سهام شناور
10.0
print(ticker.best_supply_price)  # قیمت بهترین تقاضا
109960
print(ticker.best_supply_vol)  # حجم بهترین تقاضا
8296
print(ticker.best_demand_price)  # قیمت بهترین عرضه
109920
print(ticker.best_demand_vol)  # حجم بهترین عرضه
3620
print(ticker.total_shares)  # تعداد سهام
print(ticker.market_cap) # ارزش بازار شرکت
print(ticker.shareholders)  # اطلاعات سهام‌داران عمده
print(ticker.get_shareholders_history())) # تاریخچه‌ی سهام‌داران عمده
print(ticker.get_trade_details())  # ریز معاملات روز جاری
print(ticker.get_ticker_real_time_info_response()) # اطلاعات لحظه‌ای مانند قیمت و پیشنهادات خرید و فروش
برای دریافت قیمت‌های تعدیل شده هم میشه از این کد استفاده کرد
import pytse_client as tse

ticker = tse.Ticker(symbol="بركت", adjust=True)

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

نکته ۱

طبق تجربه‌ ای که داشتم چون گاهی اوقات سایت بورس مدت زیادی طول میکشه تا اطلاعات رو بفرسته یا بعضی مواقع نمی‌فرسته بهتر هست که اول تابع دانلود رو استفاده کنید برای سهم‌هایی که لازم هست و بعد با دیتای اون‌ها کار کنید.

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

نکته ۲

بعضی از ویژگی‌ها برای همه‌ی سهم‌ها در دسترس نیست. برای مثال بعضی از سهم‌ها دارای آخرین قیمت یا پی به ای یا ای پی اس نیستند. مقدار این ویژگی‌ها در صورت نبودن برابر با None خواهد بود. پس باید در برنامه خود اینکه این مقادیر وجود دارند را بررسی کنید.

اطلاعات نماد‌های حذف شده

تعدادی از نماد‌ها توی سایت به شکل حذف شده هستند. برای گرفتن دیتای این نماد‌ها از ماژول تیکر استفاده کنید. برای مثال جهت دسترسی به دیتای نماد حذف شده خصدرا، اندیس آن را از آدرس نماد در سایت بورس بگیرید http://www.tsetmc.com/Loader.aspx?ParTree=151311&i=25165947991415904

import pytse_client as tse

ticker = tse.Ticker("", index="25165947991415904")

مقدار ‍index را با مقدار جلوی i= جایگزین میکنیم.

اطلاعات حقیقی و حقوقی

اطلاعات خرید و فروش حقیقی و حقوقی سهام رو میشه از طریق ticker.client_types گرفت این اطلاعات یه DataFrame شامل اطلاعات موجود در تب حقیقی حقوقی(تب بنفشی که در این صفحه هست) سهم هست:

date : تاریخ
individual_buy_count : تعداد معاملات خرید حقیقی
corporate_buy_count : تعداد معلاملات خرید حقوقی
individual_sell_count : تعداد معاملات فروش حقیقی
corporate_sell_count : تعداد معلاملات فروش حقوقی
individual_buy_vol : حجم خرید حقیقی
corporate_buy_vol : حجم خرید حقوقی
individual_sell_vol : حجم فروش حقیقی
corporate_sell_value : حجم فروش حقوقی
individual_buy_mean_price : قیمت میانگین خرید حقیقی
individual_sell_mean_price : قیمت میانگین فروش حقیقی
corporate_buy_mean_price : قیمت میانگین خرید حقوقی
corporate_sell_mean_price : قیمت میانگین فروش حقوقی
individual_ownership_change : تغییر مالکیت حقوقی به حقیقی

سهامداران عمده

سهام‌داران عمده اطلاعات داخل این صفحه هست. این اطلاعات رو میشه با shareholders گرفت که یک DataFrame هست.

import pytse_client as tse

ticker = tse.Ticker("وبملت")
print(ticker.shareholders)  # اطلاعات سهام‌داران عمده

# Output
 change   percentage       share                                 shareholder
0   دولت جمهوري اسلامي ايران                    23,114,768,760  11.160     0
1   صندوق تامين آتيه كاركنان بانك ملت           13,353,035,330  6.440      0
2   صندوق سرمايه گذاري واسطه گري مالي يكم       11,748,764,647  5.670      0
3   شركت پتروشيمي فن آوران-سهامي عام-           9,253,327,080   4.460      0
4   شركت گروه مالي ملت-سهام عام-                8,933,698,834   4.310      0
5   صندوق سرمايه گذاري.ا.بازارگرداني ملت     8,395,500,914   4.050      0
6   شركت سرمايه گذاري صباتامين-سهامي عام-       7,659,597,269   3.690      0
7   شركت تعاوني معين آتيه خواهان                4,561,801,327   2.200      0
8   شركت س اتهران س.خ-م ك م ف ع-                4,278,903,677   2.060      0
9   شركت گروه توسعه مالي مهرآيندگان-سهامي عام-  4,161,561,525   2.000      0
10  شركت س اخراسان رضوي س.خ-م ك م ف ع-          3,442,236,423   1.660      0
11  شركت س افارس س.خ-م ك م ف ع-                 2,593,956,288   1.250      0
12  شركت س اخوزستان س.خ-م ك م ف ع-              2,526,080,803   1.220      0
13  شركت شيرين عسل-سهامي خاص-                   2,496,936,881   1.200      0
14  شركت سرمايه گذاري ملي ايران-سهامي عام-      2,423,674,676   1.170      0
15  شركت س ااصفهان س.خ-م ك م ف ع-               2,274,221,331   1.090      0

تاریخچه‌ی سهام‌داران عمده

با استفاده از تابع get_shareholders_history میشه تاریخچه اطلاعات سهام‌داران عمده رو گرفت:

رفع خطای asyncio.run() cannot be called from a running event loop در صورتی که این خطا رو گرفتید به این معنی هست که تابع get_shareholders_history در یک تابع async داره اجرا میشه. برای رفع اون کافیه که تابع get_shareholders_history_async رو استفاده کنید مطابق مثال پایین تکه کد دوم.

import pytse_client as tse

ticker = tse.Ticker("وبملت")
ticker.get_shareholders_history(
    from_when=datetime.timedelta(days=90),  # تعداد روز‌های گذشته که مقدار پیشفرض ۹۰ روز است
    to_when=datetime.datetime.now(),  # تا چه تاریخی اطلاعات گرفته شود که پیشفرض امروز است
    only_trade_days=True,  # فقط روز‌های معاملاتی که پیشفرض بله است
)

# در صورتی که میخواهید تابع
# async
# رو استفاده کنید
await ticker.get_shareholders_history(
    from_when=datetime.timedelta(days=90),  # تعداد روز‌های گذشته که مقدار پیشفرض ۹۰ روز است
    to_when=datetime.datetime.now(),  # تا چه تاریخی اطلاعات گرفته شود که پیشفرض امروز است
    only_trade_days=True,  # فقط روز‌های معاملاتی که پیشفرض بله است
)
خروجی این تابع یک دیتا فریم حاوی دیتای زیر است:
,date,shareholder_id,shareholder_shares,shareholder_percentage,shareholder_instrument_id,shareholder_name,change
0,2021-08-30 17:01:23.037957,273,2910355428.0,32.19,IRO1RSAP0000,شركت ايراني توليداتومبيل-سايپا-,1
1,2021-08-30 17:01:23.037957,406,975144471.0,10.78,IRO1RSAP0000,شركت سايپا,1
2,2021-08-30 17:01:23.037957,50264,454000000.0,5.02,IRO1RSAP0000,شركت ايراني توليداتومبيل سايپا-سهامي عام-,1
3,2021-08-30 17:01:23.037957,42636,409843922.0,4.53,IRO1RSAP0000,شركت سرمايه گذاري وتوسعه صنعتي نيوان ابتكارس.ع,1
4,2021-08-30 17:01:23.037957,46966,116002189.0,1.28,IRO1RSAP0000,BFMصندوق.س.ا.بازارگرداني سهم آشنايكم,1
5,2021-08-31 17:01:23.037957,273,2910355428.0,32.19,IRO1RSAP0000,شركت ايراني توليداتومبيل-سايپا-,1
6,2021-08-31 17:01:23.037957,406,975144471.0,10.78,IRO1RSAP0000,شركت سايپا,1
7,2021-08-31 17:01:23.037957,50264,454000000.0,5.02,IRO1RSAP0000,شركت ايراني توليداتومبيل سايپا-سهامي عام-,1
8,2021-08-31 17:01:23.037957,42636,409843922.0,4.53,IRO1RSAP0000,شركت سرمايه گذاري وتوسعه صنعتي نيوان ابتكارس.ع,1
9,2021-08-31 17:01:23.037957,46966,116002189.0,1.28,IRO1RSAP0000,BFMصندوق.س.ا.بازارگرداني سهم آشنايكم,1
10,2021-09-01 17:01:23.037957,273,2910355428.0,32.19,IRO1RSAP0000,شركت ايراني توليداتومبيل-سايپا-,1
11,2021-09-01 17:01:23.037957,406,975144471.0,10.78,IRO1RSAP0000,شركت سايپا,1
12,2021-09-01 17:01:23.037957,50264,454000000.0,5.02,IRO1RSAP0000,شركت ايراني توليداتومبيل سايپا-سهامي عام-,1
13,2021-09-01 17:01:23.037957,42636,409843922.0,4.53,IRO1RSAP0000,شركت سرمايه گذاري وتوسعه صنعتي نيوان ابتكارس.ع,1
14,2021-09-01 17:01:23.037957,46966,116002189.0,1.28,IRO1RSAP0000,BFMصندوق.س.ا.بازارگرداني سهم آشنايكم,1

گرفتن این دیتا کار زمان بری هست (با توجه به تعداد روزی که لازم دارید) و سریع کردن کار با کد به راحتی امکان پذیر نیست. سعی نکنید با همزمان اجرا کردن این تابع برای سهم‌های مختلف روند رو سریع‌تر کنید چون سایت ip رو بلاک میکنه. اگر موقع اجرای کد پیغام زیر را به تعداد زیاد گرفتید (مثلا هر ثانیه این پیغام اومد) یعنی آیپی شما توسط سایت بورس بلاک شده و چند دقیقه صبر کنید و دوباره ادامه بدید.
Retrying pytse_client.ticker.ticker.Ticker._get_ticker_daily_info_page_response in 1.3127419515957892 seconds as it raised ClientResponseError: 500, message='Internal Server Error', url=URL('http://cdn.tsetmc.com/Loader.aspx?ParTree=15131P&i=56574323121551263&d=20210220').

تاریخچه‌ تعداد سهام

برای گرفتن این اطلاعات از تابع get_total_shares_history_async استفاده کنید.

خروجی این تابع یک دیتافریم با دو ستون date, total_shares است.

توجه داشته باشید که اجرا کردن این تابع به علت async بودن متفاوت از بقیه دستورات است. برای اطلاعات بیشتر درباره‌ی این نوع توابع این ویدیو را ببینید

در صورتی که در کد خود تابع async ندارید:

import asyncio
import pytse_client as tse
ticker = tse.Ticker("وبملت")

result = asyncio.run(ticker.get_total_shares_history_async(
    from_when=datetime.timedelta(days=90),  # تعداد روز‌های گذشته که مقدار پیشفرض ۶۰ روز است
    to_when=datetime.datetime.now(),  # تا چه تاریخی اطلاعات گرفته شود که پیشفرض امروز است
    only_trade_days=True,  # فقط روز‌های معاملاتی که پیشفرض بله است
)
اگر در برنامه‌ی خود کد async دارید: این تابع را به این شکل اجرا کنید
import pytse_client as tse
ticker = tse.Ticker("وبملت")

result = await ticker.get_total_shares_history_async(
    from_when=datetime.timedelta(days=90),  # تعداد روز‌های گذشته که مقدار پیشفرض ۶۰ روز است
    to_when=datetime.datetime.now(),  # تا چه تاریخی اطلاعات گرفته شود که پیشفرض امروز است
    only_trade_days=True,  # فقط روز‌های معاملاتی که پیشفرض بله است
)

شناور سهم

برای مثال میشه با استفاده از دیتای سهامداران عمده، شناوری سهم رو حساب کرد:

import pytse_client as tse

ticker = tse.Ticker("وبملت")

print(ticker.shareholders.percentage.sum())  # جمع درصد سهام‌داران عمده
53.63

print(100 - ticker.shareholders.percentage.sum())  # درصد سهام شناور
46.37

اطلاعات لحظه‌ای سهام

از طریق تابع get_ticker_real_time_info_response میشه اطلاعات لحظه‌ای سهام رو گرفت. در صورتی که هنگام گرفتن اطلاعات لحظه‌ای وضعیت سهام در حالت ممنوع متوقف باشد یا نماد قدیمی باشد اطلاعات لحظه‌ای موجود نیست و با ارور مواجه خواهید شد که باید به درستی هندل شود.

برای گرفتن اطلاعات لحظه‌ای به صورت فایل csv می‌توانید از تابع زیر استفاده کنید:

df = ticker_real_time_data_to_csv(ticker)
df.to_csv("test.csv") # برای ذخیره کردن در فایل
نمونه‌ی استفاده
import pytse_client as tse

ticker = tse.Ticker("وبملت")
try:
    real_time_data = ticker.get_ticker_real_time_info_response()
except RuntimeError: # هندل کردن ارور در صورت وجود نداشتن اطلاعات لحظه‌ای
    print("cannot get realtime data")

print(real_time_data.buy_orders) # پیشنهادات خرید
print(real_time_data.sell_orders) # پیشنهادات فروش
print(real_time_data.best_supply_price)  # قیمت بهترین تقاضا
print(real_time_data.best_supply_vol)  # حجم بهترین تقاضا
print(real_time_data.best_demand_price)  # قیمت بهترین عرضه
print(real_time_data.best_demand_vol)  # حجم بهترین عرضه
print(real_time_data.state)  # وضعیت نماد
print(real_time_data.last_price)  # قیمت آخرین معامله
print(real_time_data.adj_close)  # قیمت پایانی
print(real_time_data.yesterday_price)  # قیمت دیروز
print(real_time_data.open_price)  # قیمت اولین معامله
print(real_time_data.high_price)  # قیمت حداکثر
print(real_time_data.low_price)  # قیمت حداقل
print(real_time_data.count)  # تعداد معاملات
print(real_time_data.volume)  # حجم معاملات
print(real_time_data.value)  # ارزش معاملات
print(real_time_data.last_date)  # آخرین اطلاعات قیمت ناشی از تغییرات شرکتی و معاملات

# پیشنهادات فروش
for sell_order in real_time_data.sell_orders:
    print(sell_order.volume, sell_order.count, sell_order.price)

# پیشنهادات خرید
for buy_order in real_time_data.buy_orders:
    print(buy_order.volume, buy_order.count, buy_order.price)

# اطلاعات خرید و فروش حقیقی و حقوقی
print(real_time_data.individual_trade_summary.buy_count)
print(real_time_data.individual_trade_summary.buy_vol)
print(real_time_data.individual_trade_summary.sell_count)
print(real_time_data.individual_trade_summary.sell_vol)
print(real_time_data.corporate_trade_summary.buy_count)
print(real_time_data.corporate_trade_summary.buy_vol)
print(real_time_data.corporate_trade_summary.sell_count)
print(real_time_data.corporate_trade_summary.sell_vol)

ریز معاملات سهام

از طریق تابع get_trade_details می‌توان ریز معاملات آخرین روز معاملاتی سهام را گرفت:

import pytse_client as tse

ticker = tse.Ticker("نوری")
trade_details = ticker.get_trade_details()
print(trade_details)

# Output
          date  volume     price
0     09:00:20   10000  111900.0
1     09:00:20    4480  111900.0
2     09:00:20    3171  111900.0
3     09:00:20    1647  111900.0
4     09:00:20    1101  111900.0
       ...     ...       ...
6478  12:29:57    1163  116000.0
6479  12:29:57    2159  116000.0
6480  12:29:57     795  116000.0
6481  12:29:58     257  116000.0
6482  12:29:59     601  116000.0

تمامی اطلاعات موجود برای فیلترنویسی

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

همچنین تمامی اطلاعات ارائه شده در مورد اطلاعات حقیقی حقوقی های سهام هم که در ادامه آمده است میتوانید دریافت کنید.

"numof_individual_buy", "numof_corporate_buy",
"vol_individual_buy", "vol_corporate_buy",
"numof_individual_sell", "numof_corporate_sell",
"vol_individual_sell", "vol_corporate_sell"

همچنین همه اطلاعات ارائه شده توسط دیده بان بازار را هم می توانید برای تمامی سهام دریافت کنید. در ادامه مشاهده میکنید.

"index", "code", "symbol", "name", "last_changed", "open_price",
"adj_closing_price", "last_price", "number_of_trans",
"volume_of_trans", "value_of_trans", "min_price", "max_year",
"yesterday_price", "EPS", "base_volume", "group_number", "max_price_allowed", "min_price_allowed", "number_of_stocks"

در واقع از دیده بان بازار دیتاهای زیر قابل دریافت بود که به عنوان نمونه قرار میدهم ولی برخی از دیتاها برای توسعه دهندگان پکیج قابل فهم نبود(آنهایی که با ? در زیر مشخص شده اند) که در صورت علاقه مندی میتوانید با اطلاع رسانی کاربرد آن ها به ما در توسعه پکیج کمک کنید.

'71957984642204570', # id
'IRO7APTP0001', # code
'شپترو', # symbol
'پتروشيمي آبادان', # name
'122931', # last changed (time 12:29:31)
'2470', # open price
'2438', # adj_closing price
'2436', # last price
'861', # number of trans (daily)
'29225934', # volume of trans (daily)
'71250969784', # value of trans (daily)
'2436', # min price (daily)
'2500', # max price (daily)
'2511', # yesterday price
'-43', # EPS
'4000000', # base voulume
'3423', # ?
'4', # ?
'44', # group number
'2586.00', # max allowed (daily)
'2436.00', # min allowed (daily)
'10000000000', # number of stocks
'309' # ?

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

در حال حاضر امکان دریافت کل اطلاعات بروز شده و لحظه‌ای مربوط به فیلترنویسی با استفاده از تکه کد زیر موجود است.

from pytse_client import get_stats

key_stats = get_stats(base_path="hello", to_csv=True)

# Output

   ave_numof_buyer_last_12_month  ave_numof_buyer_last_3_month  ave_numof_corporation_buyer_last_12_month  ...  symbol                          name            index
0                          610.0                         345.0                                        1.0  ...   وسپهر  سرمایه گذاری مالی سپهرصادرات  114312662654155
1                          816.0                         381.0                                        1.0  ...    شصدف                صنعتی دوده فام  204092872752957
2                           92.0                          76.0                                        0.0  ...     فسا                  پتروشیمی فسا  318005355896147
3                          298.0                         246.0                                        2.0  ...   فرآور          فرآوریموادمعدنیایران  408934423224097
4                          407.0                         332.0                                        1.0  ...   سبزوا              سیمان لار سبزوار  611986653700161

همانطور که در مثال(ناقص به دلیل کمبود جا) بالا می بینید خروجی این دستور یک pandas dataframe است که آمارهای کلیدی به علاوه اطلاعات حقیقی و حقوقی و همچنین اطلاعات دیده بان بازار تمامی نمادهایی که در پکیج معتبر هستند و دیده‌بان در اختیار کاربران قرار می‌دهد را در خود دارد.

به صورت همزمان اطلاعات در ‍‍hello/key_stats.csv ذخیره می‌شود. در صورتی که نمی‌خواهید خروجی csv ساخته شود کافی است که to_csv=False قرار دهید. همینطور در صورت خالی گذاشتن base_path به جای آن stats_data/stats.csv استفاده می‌شود.

گرفتن تمام اطلاعات تاریخی یا لحظه‌ای نماد به صورت CSV

برای استفاده راحت‌تر از اطلاعات لحظه‌ای یا تاریخی و یا درست کردن فایل برای نرم افزارهای دیگه توابعی وجود داره که تمام اطلاعات نماد رو در یک فایل برمیگردونه.

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

توجه کنید این اطلاعات چیزی بیشتر از توابع موجود در پکیج ندارند و صرفا برای راحتی کار کاربران توسعه داده شده‌اند.

ticker = Ticker("وبملت")
historical_data = export_ticker_history_as_csv(ticker)
real_time_data = ticker_real_time_data_to_csv(ticker)

# برای نوشتن این اطلاعات به شکل فایل csv

historical_data.to_csv("history.csv")
real_time_data.to_csv("realtime.csv")

کامیونیتی

اگر درباره پکیج یا استفاده از اون سوالی دارید میتونید توی سرور دیسکورد بپرسید.

https://discord.gg/ampPDKHpVv

منابع آموزشی

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

الهام گرفته از:

pytse-client's People

Contributors

alised avatar ardeshirkalani avatar dependabot[bot] avatar ducksonmoon avatar farhadmpr avatar fasihi-rad avatar frustak avatar glyphack avatar lgtm-migrator avatar mahdishamisavi avatar mtndaghyani avatar paysheen avatar sfmqrb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pytse-client's Issues

دلیل نبود برخی اطلاعات

برخی از اطلاعات تابلو در ماژول Ticker وجود نداره مثل موارد زیر:
وضعیت سهم(مجاز - متوقف و ...)
تابلوی سهم: تابلوی اول - بازار فرعی و ...
میانگین حجم
ارزش معاملات
تعداد معاملات
اطلاعات حقیقی حقوقی روز جاری
و...
اینارو نمیشد گرفت و قرار داد توی Ticker?
اگه دلیل خاصی داشته بگید
تشکر...

ایندکس بجای تاریخ

باسلام
در تصویر اول، درخواست این نماد بدون دانلود هستش ، یعنی فقط تیکر صدا زده شده:
Screenshot (888)

در تصویر دوم، ابتدا دانلود صدا زده شده ، سپس تیکر صدا زده شده :
Screenshot (889)
حالا سوال اینجاست که چرا تو اولی تاریخ رو نشون میده و تو دومی شماره ردیف رو ؟
طریقه خوندن فایل CSV باید تغییر کنه ؟
با سپاس فراوان

IDLE V3.8.0 windows

سوال در مورد این کتابخانه

سلام
یکی از مشکلاتی که برای من پیش اومده بود این هست که بیایم به صورت لحظه ای اطاعات رو از سایت بگیریم
مثلا اگر الان میزان تقاضا از یک مقداری بالا رفت یک کاری رو انجام بده
الان میتونید راهنمایی کنید که چیکار باید بنکم؟
یک سوال هم داشتم
ببینید توی requests اگر من بخوام بگم بعد از بارگزاری صفحه 5 ثانیه وایستا و بعد اطلاعات رو بده باید چیکار کنم؟
مثلا اگه سایت دیده بان رو دقت کنید متوجه میشین که بعد از بارگزاری حدود 20 ثانیه باید صبر کنیم بعدش برای ما میاد اطاعات رو به نمایش در میاره. اون 20 ثانیه صبر رو چه طوری باید لحاظ کنیم؟
ممنون

حدود هفتاد سهم جامانده و جدید

سلام دوست عزیز
من هنگام ران کردن متوجه شدم یک سری از نمادها تعریف نشده که با دیتا بیس خودم یه مقایسه کردم و متوجه شدم این ها هستند و تصمیم گرفتم برای تمیز تر شدن کارتون این لیست رو براتون بفرستم
آینده، تلیسه، کزغال، کماسه، کدما، ومعادن، چخزر، کسرام، کاذر، کفپارس، ساذری، کباده، فاسمین، فاهواز، وسدید، فاذر، فلامی، فبستم، تپکو، تفیرو، تمحرکه، خزامیا، خفناور، قجام، قنقش، بکهنوج، خودکفا، غاذر، غشان، غدیس، غصینو، دحاوی، شسینا، دهدشت، کازرو، شگامرن، ممسنی، بوعلی، کحافظ، سبزوا، ستران، وکبهمن، وصنا، وملت، وکار، سمایه، انرژی1، انرژی2، انرژی3، نبورس، نکالا، سپیدار، های وب، شساخت، البرز،وسفارس، وسلرستا،وسخوز، وسصفا، وساغربی، وساشرقی، وسکرد، وسگیلا، وسرضوی، وسیزد، وسکرمان، وسهمدا، وسکهبو، وسیستا، وسمازن
در ضمن سهم آس پ هم که توی لیستتون هست بین الف و سین فاصله ای نداره میتونید بین سین و الف فاصله بزارید تا با نوشتار سایت تی اس ای یکی در بیاد
بازم متشکر بابت کار ارزشمندی که انجام دادید

دانلود اطلاعات شاخص

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

عدم وجود اطلاعات دیروز و تغییرات درصدی و مقداری در سابقه

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

نشناختن نماد کماسه

مشکل نشناختن برخی از دستورات در پایتون

چطور اتفاق افتاد؟
کاری که میکردید که باعث شد این اتفاق بیوفته
طبق گفته های ویرگول پیشرفتم و کد هارو زدم در محیط پایچارم
اما 4-5 خط آخر رو بهم ارور داد و میگه همچین چیزی موجود نیست. مثلا این کد رو زدم :
import pytse_client as tse

tse.download(symbols="کماسه", write_to_csv=True) # optional
ticker = tse.Ticker("کماسه")

print(ticker.history) # سابقه قیمت سهم

print(ticker.title) # نام شرکت

print(ticker.url) # آدرس صفحه سهم

print(ticker.group_name) # نام گروه

print(ticker.eps) # eps

print(ticker.p_e_ratio) # P/E

print(ticker.group_p_e_ratio) # group P/E

print(ticker.base_volume) # حجم مبنا

print(ticker.last_price) # آخرین معامله

print(ticker.adj_close) # قیمت پایانی

print(ticker.best_supply_price) # قیمت بهترین تقاضا

print(ticker.best_supply_vol) # حجم بهترین تقاضا

print(ticker.best_demand_price) # قیمت بهترین عرضه

print(ticker.best_demand_vol) # حجم بهترین عرضه
و این رو بهم برگردوند
375122.0
128720
127880
Traceback (most recent call last):
File "C:/Users/Dr-raiane/Desktop/files_on_desktop_99 3 25/New folder/17 1 99/محمدرضا/kampozit/Projects/boooooooooooooors/1.py", line 25, in
print(ticker.best_supply_price) # قیمت بهترین تقاضا
AttributeError: 'Ticker' object has no attribute 'best_supply_price'

انتظار دارید چه اتفاقی بیوفته
اطلاعات خواسته شده رو بهم برگردونه

اطلاعات سیستم:

  • سیستم عامل: ویندوز 10
  • ورژن پایتون : 3.7
  • محیطی که توش کار میکردید( سی ام دی، پاورشل یا بش) : پایچارم

امکان اجرای فیلترها

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

چه کدی چقدرخریده یا فروش داشته

با سلام امکانش است که در ریز معاملات متوجه شد که چه کدی چقدر خرید یا فروش داشته
مثلا می گن یک کد حقیقی چند میلیارد تومان خرید زد ؟ ایا شما می توانید کدها هنگام معاملات دسترسی داشته باشین ؟

مشکل دریافت اطلاعات حقیقی حقوقی

من برای گرفتن خروجی حقیقی و حقوقی مشلکل دارم فایلش دقیقا کدومه؟

یه دونه بود هر چی میزنم پیغام میده و رد میکنه

فایلی میخوام که با فرمت اکسل تمام حقیقی حقوقی رو بهم خروجی بده

میشه کمکم کنید اساتید

مشکل کار نکردن پکیج در colab

توضیح مشکل پیش آمده
سلام
زمانی که طبق راهنمایی ارائه شده میخوام که داده ها دانلود بشن در نهایت با ارور
"time out"
فرایند متوقف میشه. این ارور تو محیط
colab
داده میشه. اما وقتی که لینک های سایت رو تو فایل ستینگ بررسی کردم متوجه شدم احتمالا لینک ها تغییر کردن دوباره
متن ارور:

`timeout: timed out

During handling of the above exception, another exception occurred:

ConnectTimeoutError Traceback (most recent call last)
ConnectTimeoutError: (<urllib3.connection.HTTPConnection object at 0x7f8b93e752e8>, 'Connection to tsetmc.com timed out. (connect timeout=10)')

During handling of the above exception, another exception occurred:

MaxRetryError Traceback (most recent call last)
MaxRetryError: HTTPConnectionPool(host='tsetmc.com', port=80): Max retries exceeded with url: /tsev2/data/Export-txt.aspx?t=i&a=1&b=0&i=778253364357513 (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f8b93e752e8>, 'Connection to tsetmc.com timed out. (connect timeout=10)'))

During handling of the above exception, another exception occurred:

ConnectTimeout Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
502 # TODO: Remove this in 3.0.0: see #2811
503 if not isinstance(e.reason, NewConnectionError):
--> 504 raise ConnectTimeout(e, request=request)
505
506 if isinstance(e.reason, ResponseError):

ConnectTimeout: HTTPConnectionPool(host='tsetmc.com', port=80): Max retries exceeded with url: /tsev2/data/Export-txt.aspx?t=i&a=1&b=0&i=778253364357513 (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f8b93e752e8>, 'Connection to tsetmc.com timed out. (connect timeout=10)'))`

ارور numpy

توضیح مشکل پیش آمده
با سلام. بنده نتونستم از پکیج استفاده کنم. خواستم مثال های خودتون رو اجرا کنم و متاسفانه با مشکل مواجه شدم.

چطور اتفاق افتاد؟
کاری که میکردید که باعث شد این اتفاق بیوفته:

  1. اطلاعات همه سهام ها را دانلود کردم
    با این کد مثال خودتون
    """
    This example is about downloading all tickers csv data.
    """

from pytse_client.download import download

download(symbols="all", write_to_csv=True, base_path="hey")

  1. ارور زیر را گرفتم(متن کامل ارور)

PS C:\Users\karim_wvzqrk5> python d:/pytse-client-master/pytse-client-master/pytse_client/examples/download_all.py
** On entry to DGEBAL parameter number 3 had an illegal value
** On entry to DGEHRD parameter number 2 had an illegal value
** On entry to DORGHR DORGQR parameter number 2 had an illegal value
** On entry to DHSEQR parameter number 4 had an illegal value
Traceback (most recent call last):
File "d:/pytse-client-master/pytse-client-master/pytse_client/examples/download_all.py", line 5, in
from pytse_client.download import download
File "C:\Users\karim_wvzqrk5\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pytse_client_init_.py", line 1, in
from .download import download
File "C:\Users\karim_wvzqrk5\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pytse_client\download.py", line 6, in
import pandas as pd
File "C:\Users\karim_wvzqrk5\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pandas_init_.py", line 11, in
import(dependency)
File "C:\Users\karim_wvzqrk5\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\numpy_init_.py", line 305, in
win_os_check()
File "C:\Users\karim_wvzqrk5\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\numpy_init
.py", line 302, in _win_os_check
raise RuntimeError(msg.format(file)) from None
RuntimeError: The current Numpy installation ('C:\Users\karim_wvzqrk5\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\numpy\init.py') fails to pass a sanity check due to a bug in the windows runtime. See this issue for more information: https://tinyurl.com/y3dm3h86

اسکرین شات
image

اطلاعات سیستم:

  • سیستم عامل: ویندوز ۱۰
  • python 3.8.6
  • محیطی که توش کار میکردید( سی ام دی، پاورشل یا بش)
    windows powershell

اطلاعات اضافی
با تشکر

سهامداران عمده

تغییرات سهام داران عمده هم اگه اضافه بشه عالیه
اطلاعاتشم تو سایت tse هست

Error when installing using pip

سلام .. وقتی اقدام به نصب از طریق دستور پیپ میکنم میگه که پکیج رو نمیتونه پیدا کنه !
Could not find a version that satisfies the requirement pytse-client (from ver
sions: )
No matching distribution found for pytse-client

نحوه بروزرسانی دیتا

سلام دوستان . موقعی که دستور download رو میزنیم چجوری اطلاعات رو بروز میکنه؟ کلش رو میره از اول میگیره یا یه روال دیگه ای داره؟
بیشتر منظورم performance کار هستش
این رو اگه توی صفحه اصلی هم بزارید خوبه فکر کنم سوال خیلیا باشه

gpe = re.findall( IndexError: list index out of rangeگزارش مشکل

توضیح مشکل پیش آمده
If findall doesn't find a match, it will return an empty list []; your error occurs when you try to fetch the first item from this empty list, resulting in your exception
برا بعضی سهام ها [] برمیگرداند و برای بعضی سهام ها [''] برمی گرداند من که با کد زیر برای خودم حلش کردمrefindall
findall

خطا در دریافت تاریخ شمسی

سلام
زمانی که ما دیتا رو به صورت فایل سی اس وی دانلود میکنم یه مشکلی که وجود داره اینه که داده های تاریخ ما وقتی شمسی هست روزهای اخر ماه هایی که ۳۱ روزه هست رو به صورت خالی میده و برای رفع این مساله چه باید بکنیم ؟
ممنون

گزارش مشکل

توضیح مشکل پیش آمده

چطور اتفاق افتاد؟
کاری که میکردید که باعث شد این اتفاق بیوفته:

  1. اطلاعات همه سهام ها را دانلود کردم
  2. سعی داشتم اطلاعات معاملات سهم فلان رو بگیرم با دستورات زیر
  3. ارور زیر را گرفتم(متن کامل ارور)

انتظار دارید چه اتفاقی بیوفته
انتظار دارید که با اعمال بالا چه اتفاقی در برنامه بیوفته

اسکرین شات
اگر چیزی هست که تصویر لازم داره اون رو اینجا قرار بدید

اطلاعات سیستم:

  • سیستم عامل: مثل ویندوز ۱۰ یا اوبونتو
  • ورژن پایتون
  • محیطی که توش کار میکردید( سی ام دی، پاورشل یا بش)

اطلاعات اضافی
اگر چیزی هست که لازمه گفته بشه و توی اطلاعات بالا نیست اینجا بنویسید

گزارش مشکل

سلام
برای گرفتن ticker.title
از سهم انرژی3 مشکل داره! فکر میکنم درون کدها نوشتید که قسمت حروفی رو پیدا کنه و چون درون اسم این سهم عدد هم هست مشکل بوجود میاد!

ارور در گرفتن p/e

چطور اتفاق افتاد؟

در پردازش اطلاعات پی بر ای گروه سهم هایی مثل وملت و فالوم به مشکل خوردم.
از دستورات examples استفاده کردم

Error:
Traceback (most recent call last):
File "ticker.py", line 21, in
print(ticker.group_p_e_ratio) # group P/E
File "pytse-client/pytse_client/ticker.py", line 82, in group_p_e_ratio
return float(
ValueError: could not convert string to float: ' '

اطلاعات سیستم:
۲۰ سیستم عامل: اوبونتو

گزارش مشکل

در دریافت اطلاعات مربوط به P/E برخی نمادها خطا ایجاد می شود
در اینجا یکی از نمادهایی که این خطا را داشت با کد توضیح دادم
1.اطلاعات مربوط به نماد "تپمپی" را دانلود کردم
tse.download(symbols="تپمپی", write_to_csv=True)
2. سعی داشتم اطلاعات P/E رو بگیرم با دستورات زیر
if symbols[s].ticker.p_e_ratio < symbols[s].ticker.group_p_e_ratio:
3. ارور زیر را گرفتم(متن کامل ارور)
int(response.text.split()[1].split(",")[1]),
ValueError: invalid literal for int() with base 10: 'S'
مقدار response هم پرینت گرفتم که این هست:
response: 06:37:52,IS,37240,37590,0,37590,0,0,0,0,0,0,20201019,63752;99/7/28 11:05:05,S,1467676.17,

(46595.66)
,55780947218741690,1628636236,26467150292807,261440,S,634648932,12509526907866,223629,S,12053143,74690541540,2991,;0@0@0@37240@23960@13,0@0@0@39200@1500@2,0@0@0@40330@3458@3,;94015,604384,723305;;;;0;

اطلاعات سیستم:

  • سیستم عامل: مثل ویندوز ۱۰
  • 38: ورژن پایتون
  • محیطی که توش کار میکردید( pycharm)

مشکل در دریافت اطلاعات حقیقی حقوقی

توضیح مشکل پیش آمده
مشکل در دریافت اطلاعات خرید و فروش مشتری‌های حقیقی و حقوقی
ticker.client_types

چطور اتفاق افتاد؟
کاری که میکردم که باعث شد این اتفاق بیوفته:

  1. اطلاعات یکی از سهم‌ها رو دانلود کردم
  2. سعی داشتم اطلاعات خرید و فروش مشتری‌های حقیقی و حقوقی رو بگیرم با دستور زیر
    ticker.client_types
  3. ارور زیر رو گرفتم

File "C:\Users\؟؟؟\temp.py", line 5, in
print(ticker.client_types)

File "E:\ProgramData\Anaconda3\lib\site-packages\pytse_client\ticker.py", line 131, in client_types
client_types_data_frame[f"{i}value"].astype(float) /

TypeError: 'NoneType' object is not subscriptable

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

اطلاعات سیستم:

  • سیستم عامل: ویندوز 7
  • پایتون ورژن 3.7
  • از محیط اسپایدر آناکوندا استفاده می‌کنم

عدم امکان دریافت داده ها به صورت حلقه

با عرض سلام و خسته نباشید
من میخواستم حجم فروش رو در نماد ها به صورت تک به تک استخراج و سپس نمایش دهم
برای این کار توسط یک حلقه نام نماد ها رو یکی یکی به تیکر می فرستادم

symbols = tse.symbols_data.all_symbols()
for symbol in symbols:
ticker = tse.Ticker(symbol)
power_of_seller = ticker.best_supply_vol
print("hajm:", power_of_seller)

اما هر سری بعد از اجرای چند خط با خطای زیر مواجه میشن که نمایش این خطا به صورت رندم هست شاید بعد از نمایش اطلاعات پنج سهم خودش رو نشون بده شاید هم همون ابتدای اجرا
image

in get_ticker_real_time_info_response
int(response.text.split()[1].split(",")[1]),
ValueError: invalid literal for int() with base 10: 'F'
مواجه شدم
البته بیشتر وقت ها با خطای زیر مواجه میشم
image
image

اطلاعات سیستم:

  • سیستم عامل: مثل ویندوز ۱۰
    -3.7.6 ورژن پایتون
  • vscode
    منمون میشم اگر راهنمایی بفرمایید
    در نمونه مثال ها هم هچنین کدی با کاربرد مشابه نبود

گرفتن ناو صندوق‌ها

برای صندوق‌های سرمایه‌گذاری مثل «دارا یکم» ظاهراً Ticker روشی برای گرفتن NAV ابطال نداره. اگر ممکن بود اضافه کنید.

گزارش مشکل

بعضی از سهام رو وقتی که سرچ میکنیم ارور میاره مثلا تملت ُ یا زکوثر
بنظرم بخاطر حروف فارسی هستش و اگه مثل پکیج
theran_stock
اگه بشه که بر اساس ادرس پیج سهم در سایت بورس و یا گزینه لایک ...سهم رو سرچ کرد خیلی خوب میشه

پایتون ۳.۷ در ابونتو دارم استفاده میکنم
اسکرین شات رو اضافه کردم که ببینید
image

عدم وجود برخی نماد ها

با سلام و احترام،
برخی نماد ها مثل انرژی 3 و یا نماد سفارود، وسپهر در این لیست واکشی وجود ندارند آیا دلیل خاصی دارد؟

امکان دریافت شناوری؟

با درود
سوالی داشتم در مورد این پروژه.

آیا امکان دریافت شناوری و حجم معاملات نماد ها به صورت روزانه با استفاده از این پروژه وجود داره یا نه؟

ممنون

اطلاعات امروز

با سلام، آیا امکان هست که دسترسی به اطلاعات امروز (پایان کار حتی( را در برنامه قرار دهید؟

درخواست داده

با سلام

برنامه ای که نوشته اید بسیار جالب و حتما کاربردی است ، جای قدردانی دارد.

با توجه به عدم آشنایی من با زبان و محیط پایتون ، آیا امکان دریافت نتایج برنامه نوشته شده شما برای سهام بازار بورس بصورت فایل اکسل یا ... هست ؟

با تشکر
مسعود

MIT or GPLv3?

It is license = "MIT" in pyproject.toml, but the LICENSE file is GPLv3. These two are incompatible. My guess is that the license parameter in pyproject.toml is a typo and should be changed to GPLv3.

گزارش مشکل

سلام
من کد اولیه رو هم که تویه colab مینوسم
خطای time out میده
pip install pytse-client
import pytse_client as tse
tickers = tse.download(symbols="ولملت")
tickers["ولملت"]

ticker.client_types

سلام.خسته نباشی.
امکانش هست تابعی برای ذخیره و دانلود اطلاعات حقیقی و حقوقی هم قراربدی؟
یه جوری که بشه هم بصورت تک به تک و هم همه سهام بصورت یکجا اطلاعات رو ذخیره کرد؟
.ممنون از لطف شما.متاسفانه من تازه وارد دنیای برنامه نویسی شدم والا به شما زحمت نمیدادم.

گزارش مشکل

توضیح مشکل پیش آمده

چطور اتفاق افتاد؟
کاری که میکردید که باعث شد این اتفاق بیوفته:

  1. اطلاعات همه سهام ها را دانلود کردم
  2. سعی داشتم اطلاعات معاملات سهم فلان رو بگیرم با دستورات زیر
  3. ارور زیر را گرفتم(متن کامل ارور)

انتظار دارید چه اتفاقی بیوفته
انتظار دارید که با اعمال بالا چه اتفاقی در برنامه بیوفته

اسکرین شات
اگر چیزی هست که تصویر لازم داره اون رو اینجا قرار بدید

اطلاعات سیستم:

  • سیستم عامل: مثل ویندوز ۱۰ یا اوبونتو
  • ورژن پایتون
  • محیطی که توش کار میکردید( سی ام دی، پاورشل یا بش)

اطلاعات اضافی
اگر چیزی هست که لازمه گفته بشه و توی اطلاعات بالا نیست اینجا بنویسید

پیشنهاد برای بهتر شدن

I wanted to type this out in Farsi, but since Github's styling is not so Farsi-friendly, I will try out my best in English:

Before I start, I have to say that you are doing god's work here :) Thank you so much for all of your efforts. There is no one time official solution for getting the TSE's data, and their TseClient software is as shitty as their website. Here goes all of my recommendations for you:

So the First thing I noticed is that, you library returns back some kind of TimeOut Error while trying to scrape data from TSETMC, which was somehow solved by running the cell tickers = tse.download(symbols="all", write_to_csv=True) multiple times (I use Jupyter Notbook as my development environment). After 4 tries and getting TimeOut Error in the first two, I had 583 csv file in "tickers_data" folder, which I think is still incomplete, after the third try the error went away and the number of csv file didn't increase either.

The second thing I noticed is that your library won't scrape the ETFs data, which is also a flaw.

These are the one that I have came across so far, will notify you if I find anything new.

خطا برای نماد هایی که در فایل جیسون نیستند

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

مقايسه قسمت تعديل شده در نمادها

سلام و ممنون از پكيج خوبت، اگه بشه بتونيم ستون خاصي از ديتا رو براي چند نماد با تاريخ فراخواني كنيم خيلي خوب ميشه، مثلا يه بازه اي از تاريخ رو براي چند نماد انتخاب كنبم و اون نمادا قيمتاي تعديل شدشو همراه تاريخ، باهم مقايسه كنه

قابلیت دریافت اطلاعات دریافت تاریخچه سهامداران

مشکلی که دارید چی هست؟
قابلیت دریافت اطلاعات دریافت تاریخچه سهامداران عمده امکان پذیر نیست

راه حل
میتونیم از این صفحه این اطلاعات رو دریافت کنیم و به برنامه اضافه کنیم
http://cdn.tsetmc.com/Loader.aspx?ParTree=15131P&i=4369934250728330&d=20210202

نکات تکمیلی
این اطلاعات باید به شکل دیتافریم در دسترس باشه

ticker.client_types doesn't work

با سلام
اطلاعات حقیقی و حقوقی به درستی نشون داده نمیشه حتی با آپدیت پکیج هم مشکل برطرف نشد.

ارور زیر رو میده:

'Ticker' object has no attribute 'client_types'

ممنون

گزارش مشکل

سلام و خسته نباشید
هنگام کار با تابع دریافت اطلاعات سهامداران عمده و تشکیل حلقه به مشکل وجود نداشتن دیتا در بعضی نمادها بر خورد کردم همچنین در برخی نماد ها مثل بکام با این که نمادها در
و سایت بورس با حروف عربی نوشته میشوند اما با حرف ک فارسی و ی فارسی پاسخ دریافت میکرد و با نام اصلی خیر. برخی نمادها هم هنگام قرار گرفتن در حلقه خطا داشتند و از سمت سرور بعذ از ۵۰۰ تلاش پاسخ دریافت نشد. این مورد به نظر با گذاشتن دستور اسلیپ کمی برطرف شد اما سوال اینجاست. چرا زمانی که لیست نمادهایی که در خود برنامه تعریف شده موقع قرار گرفتن در حلقه و دریافت اطلاعات سهامداران عمده چنین ایرادی ندارد؟

خلاصه کد برنامه به این صورت است:
from pytse_client import Ticker
import pandas as pd
import time
pd.set_option('display.max_columns',20)

names = ["اپرداز","اتکام","اتکای",...]

a = 0

for x in names:
print(Ticker(x).shareholders.percentage.sum())
a = a + 1
if (a == 25 or a == 50 or ... a == 625):
time.sleep(10)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.