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

تابلوی سهام بانک دی در سایت بورس تهرانیه مدت مشغول یادگرفتن بازار بورس بودم و استفاده از برنامه نویسی توی اون بودم. از اونجایی که دریافت اطلاعات از بورس تهران با مشکلاتی همراه هست و اکثرا زمانی که تلاش میکردم این اطلاعات رو دانلود کنم یا ناقص بود یا بسیار کند. دنبال راهی ساده برای گرفتن این اطلاعات بودم؛ در نتیجه بعد از اینکه تونستم راه حل رو پیدا کنم اون رو به یه پکیج پایتون تبدیل کردم. این پکیج روی github و pypi هست.هدف این پکیج دادن قابلیت دسترسی به اطلاعات سایت بورس تهران،‌ ذخیره در فایل یا دسترسی به اون در کد پایتون هست. برای مثال دانلود سابقه معاملات یک سهم یا اطلاعات بنیادی سهم با داشتن عنوان نماد بدون نیاز به دانلود اطلاعات کل نمادها.نصب pytse_clientpip install pytse_clientکارهایی که میشه با این پکیج انجام داد: دانلود سابقه معاملات یک یا تمام نمادها و ذخیره اون در فایل یا استفاده در کددریافت اطلاعات فاندامنتال یک نماد شامل(eps, p/e ,حجم مبنا)گرفتن خروجی DataFrame سابقه معاملات نمادروش استفادهدانلود سابقه نماد(ها)برای دانلود سابقه نماد باید از تابع download استفاده کرد این تابع یک یا چند نماد رو میگره و دیتای اون هارو برمیگردونه و قابلیت ذخیره این اطلاعات در قالب csv هم داره:import pytse_client as tse tickers = tse.download(symbols=&quotولملت&quot) tickers[&quotولملت&quot] 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تابع download سابقه سهام رو دانلود میکنه و در نهایت یه دیکشنری برمیگردونه که با استفاده از نماد سهم میشه سابقه اون رو گرفت.این تابع رو میشه برای چند سهم هم استفاده کرد یعنی:tse.download(symbols=[&quotوبملت&quot, &quotولملت&quot]) tickers[&quotولملت&quot] tickers[&quotوبملت&quot]یا اگر میخواید اطلاعات کل سهام ها دانلود بشه:tse.download(symbols=&quotall&quot)برای اینکه اطلاعاتی که دانلود میشه رو توی فایل نوشته بشه باید به تابع مقدار write_to_csv=True رو داد یعنی:tse.download(symbols=&quotall&quot, write_to_csv=True)این کد بعد از اجرا توی یه فولدر کنار همونجایی که اجرا میشه درست میکنه و سابقه این سهام هارو اونجا ذخیره میکنه.کار با اطلاعات یک سهامبرای گرفتن اطلاعات یک سهام باید از کلاس Ticker استفاده کرد(واسه دیدن همه‌ی اطلاعاتی که از یه سهام میشه دید این ویکی رو چک کنید):import pytse_client as tse ticker = tse.Ticker(&quotوبملت&quot) 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) # قیمت پایانیوقتی به Ticker اسم یک سهم داده میشه اطلاعات اون رو از سایت tsetmc.com میگیره و به شکلی که میبینید میشه به اون دسترسی داشت.(اطلاعات حقیقی و حقوقی اضافه شده و توی گیتهاب میتونید نحوه استفاده اون رو ببینید)نکته:تو تجربه‌ای که داشتم سایت tsetmc گاهی اوقات مقدار زیادی طول میکشه یا ارور میده و نمیشه به سابقه سهام چندین بار دسترسی داشت. برای حل این مشکل توی تابع download یه سری راه حل استفاده کردم که سرعت خوبی داشته باشه و سابقه ناقص نباشه. برای اینکه سرعت بیشتر برای دسترسی به اطلاعات یه سهم از طریق Ticker داشته باشید میشه اول سابقه سهم رو با تابع download دانلود کرد بعد وقتی که Ticker رو استفاده کنید به جای دانلود دوباره اطلاعات، اطلاعات از روی فایل گرفته میشه یعنی:tse.download(symbols=&quotوبملت&quot, write_to_csv=True) # optional ticker = tse.Ticker(&quotوبملت&quot)فرق این کد با کد بالا این هست که قبل از استفاده از Ticker برای گرفتن اطلاعات سهام وبملت اول تابع download رو صدا کردیم و مقدار write_to_csv رو True گذاشتیم. اینطوری اگر چند جای دیگه هم بخوایم با Ticker به اطلاعات وبملت دسترسی داشته باشیم لازم نیست که اطلاعات دانلود بشه و از روی فایل ذخیره شده خونده میشه. پس اگر لازم دارید که اطلاعات تعداد زیادی سهم رو بررسی کنید به جای گرفتن دونه به دونه با استفاده از Ticker یک بار اطلاعات اون هارو دانلود کنید بعد با استفاده از Ticker اون اطلاعات رو بخونید.لیست تمام نمادهای بورس تهرانبعد از اینکه اطلاعات رو دانلود می‌کنیم و میخوایم با کلاس Ticker با اطلاعات نمادها کار کنیم لازم هست نام نماد رو به Ticker بدیم. مثلا برای اینکه بعد از دانلود سابقه معامله تمام سهم ها، معاملات روز آخر هر سهم رو ببینید:import pytse_client as tse tse.download(symbols=&quotall&quot) for symbol in tse.all_symbols(): ticker = tse.Ticker(symbol) df = ticker.history print(df.tail(1))مثال استفاده از این پکیج(استراتژی SMA Cross)فرض کنید بخوایم یه سهم رو تحلیل کنیم و ببینیم که آیا طبق استراتژی SMA زمان خرید اون سهام هست یا نه.import pytse_client as tse ticker = tse.Ticker(&quotوبملت&quot) history = ticker.history def sma(series, periods: int, ): return series.rolling(window=periods, min_periods=periods).mean() sma_10 = sma(history.close, 10) sma_20 = sma(history.close, 20) buy_signals = ( (sma_10 > sma_20) & (sma_20.shift(1) > sma_10.shift(1)) ) print(buy_signals.tail(60))خروجی این کد یه لیست هست از مقادیر True و False که نشون میده آیا اون روز بر اساس استراتژی تعریف شده این سهم رو خرید یا نه.جمع‌بندیتوی این مطلب کار‌هایی که با این پکیج میشه انجام داد رو نوشتم و این قابلیت‌ها به مرور بیشتر خواهند شد،در حال حاضر توضیحات استفاده از پکیج توی گیتهاب پروژه خواهد بود.اگر از پکیج استفاده کردید و نظری دربارش داشتید خوشحال میشم بدونم و اگر مشکلی توی اجرا هم پیش اومد میتونید واسش issue درست کنید.