چند روز پیش بود که برای یک پروژه شخصی در حال جمعآوری تاریخچه قیمت سهام در بورس تهران بودم، برای جمعآوری و منظم کردن اطلاعات از یک پایگاهداده کوچک و سبک مبتنی بر `sqlite` استفاده کردم. بعد از کمی کار کردن به این نتیجه رسیدم که میشه با کمی دستکاری یک بسته مناسب برای دسترسی راحت به قیمت های بورس برای استفاده علاقهمندان به بورس و پایتون آماده کرد. حالا نسخه ابتدایی این بسته آماده است و از طریق github و pypi با نام `tehran_stocks` در دسترس است.
مثل هر پکیج پایتون شما میتونید به راحتی با استفاده از `pip` بسته سهام تهران رو نصب کنید:
pip install tehran_stocks
روش توصیه شده برای استفاده از محیط مجازی پایتون برای این پکیچ `pipenv` ولی شما میتونید از هر روش که مایلید این بسته رو استفاده کنید. در زمان نگارش این متن نسخه ۰.۵.۳ آخرین نسخه منتشر شده در گیتهاب و پایپای هست. برای اینکه مطمئن باشید همه چیز تحت کنترل هست مطمئن باشید که شما هم نسخه ۰.۵.۳ را نصب دارید، در غیر این صورت حتما به مستندات موجود در گیتهاب سهام تهران مراجعه کنید.
برای استفاده از پکیج نیاز به یک راهاندازی ابتدایی هست و برای راهاندازی ابتدایی دو راه حل وجود دارد:
راه حل اول:
در یک محیط مثل ژوپیتر یا در یک فایل پایتون ساده خط زیر رو وارد کنید:
import tehran_stocks
کد مورد نظر رو اجرا کنید و منتظر بمونید تا بسته کارهای خودش رو انجام بده. در کمتر از یک دقیقه پایگاه داده ساخته شده و آماده دریافت قیمتهاست. در صورتی که اولین بار از بسته استفاده کنید، رابط کاربری از شما یک سوال خواهد پرسید.
Do you want to download all price? [y,(n)]
اگر جواب شما مثبت بود، باید مدتی منتظر بمانید و بعد از آن قیمت تمامی سهمهای مورد نظر رو تا تاریخ اجرای کد در کامپیوترتان خواهید داشت. در غیر این صورت هر زمان که مایل بودید. میتونید از سایر روشهای دریافت قیمت استفاده کنید.
راه حل دوم:
اگر از لینوکس و مک استفاده میکنید در ترمینال و اگر از ویندوز استفاده میکنید در پاورشل میتونید با استفاده از دستور زیر پایگاهداده رو آماده کنید.
ts-get init
با اجرای دستور بالا دیتابیس آماده شده و در صورتی که اولین اجرا باشد از شما در مورد دانلود تمامی اطلاعات سوال میکند و مطابق تصمیم شما عمل میکند.
به همین سادگی میتونید به قیمتها دسترسی داشته باشید. قبل از اینکه در مورد نحوه دسترسی به قیمتها صحبت کنیم، بهتره که چند روش برای دریافت و بروزرسانی قیمتها رو با هم بررسی کنیم.
برای دریافت و بروزرسانی قیمت ها چند روش وجود داره، نکته مهم و جالب اینه که دریافت برای اولین بار و همینطور بروزرسانی پایگاه داده در همه حالتها با یک دستور انجام میشه، فعلا ۳ روش برای دریافت قیمتها وجود دارد:
بروزرسانی همه قیمتها:
برای بروزرسانی قیمت دو راه حل وجود دارد. استفاده از خط فرمان(command line) و استفاده از کد پایتون.
برای بروزرسانی همه سهمها و استفاده از خط فرمان میشه کافیه دستور زیر رو در ترمینال وارد کنید:
ts-get update
منتظر بمونید و سهمها در پایگاه داده شما در دسترس هستند.
در کد پایتون نیز میتونید دستور زیر رو وارد کنید:
from tehran_stocks import get_all_price get_all_price()
بعد از اجرای کد همه قیمتها در دسترس شماست.
فرآیند دریافت کل قیمتها بسته به سرعت اینترنت شما ممکن است تا چندساعت نیز زمان ببرد ولی با یک سرعت مناسب در ۲۰ دقیقه دریافت میشود.
بروزرسانی قیمتهای یک گروه:
برای استفاده از این روش باید کد گروه مورد نظر رو بدونید برای بدست آوردن این عدد میتونید از روش زیر استفاده کنید:
در خط فرمان:
ts_get get_groups
که احتمالا بخاطر عدم پشتیبانی از فارسی با مشکل مواجه میشید و یا در یک محیط دیگر مثل ژوپیتر نوتبوک:
from tehran_stock import Stocks # we will talk about Stocks later Stock.get_group()
حالا میتونید با یکی از این دو روش قیمتهای مربوط به گروه مورد نظر رو بدست بیارید، مثلا برای گروه خودرو با کد ۳۴ در خط فرمان
ts-get group 34
یا در محیط پایتون:
from tehran_stock import update_group update_group(34)
خیلی سریع قیمتهای بروز در دستهبندی گروه خودرو آماده پردازش هستند.
برای استفاده از روش سوم باید کمی در مورد دسترسی به سهمها صحبت کنیم.
سهم در بسته سهام تهران به زبان پایتونی یک شیء هستند که ویژگیهای خاص خود را دارند. نام،نماد، گروه و تاریخچه قیمت از جمله ویژگیهای موجود برای هر سهم هستند. برای استفاده از Stocks باید آن را وارد کنیم:
from tehran_stock import Stocks
با استفاده از Stocks میتوانید به تمامی سهمهای موجود( که دارای سابقه قیمت هستند) دسترسی پیدا کنید.
برای دسترسی به سهمها میتوانید از چند پارامتر استفاده کنید،نماد سهم(name)، عنوان سهم(title)و کد سهم(code) که در آدرس سهم در سایت tsetmc.com وجود دارد.
مثلا برای دریافت سهم گلگهر میتوانید از روشهای زیر استفاده کنید:
stock = Stocks.query.filter_by(code='35700344742885862').first() stock = Stocks.query.filter_by(name='کگل').first() stock = Stocks.query.filter(Stocks.title.like'%گل گهر%').first() #its based on sqlalchemy
بعد از این شما میتوانید به اطلاعات سهم گلگهر دسترسی دارید.
در نسخه فعلی ۴ متد برای هر سهم وجود دارد.
نکته جالب در مورد متد stock.df این است که اگر برای سهم مورد نظر قیمت را دریافت نکرده باشید، به صورت خودکار اطلاعات لازم را دریافت کرده و بعد از آن دیتافریم قیمتها را به شما نمایش میدهد.
در نسخه فعلی مهمترین ویژگی بسته دسترسی به دیتافریم هر سهم است. اگر با PANDAS آشنایی داشته باشید براحتی میتونید مسیر خودتون رو برای کارهای علمی و مالی ادامه بدید، اگر هم مایلید که از یک ابزار دیگر برای پردازشهای خود استفاده کنید میتوانید به راحتی با استفاده از یکی از متدهای زیر تاریخچه قیمت را به خروجی مورد نظر خود تبدیل کنید:
stock.df.to_csv('price.csv') stock.df.to_excel('price.xlsx') stock.df.to_stata('price.dta')
هدف اصلی این بسته تسهیل دسترسی به دادههای بورسی هست و در قدم اول قرار بود مسئله من رو حل کنه که توی این کار موفق بوده، در زمان طراحی هم بیشتر این هدف دنبال شده که دادههای خام برای پردازشهای (غالبا علمی) آتی براحتی در دسترس باشند.
در بروزرسانیهای آتی بسته سعی میکنم علاوه بر بهبود عملکرد، تسهیل جستجوی سهام و اضافه کردن تقویم شمسی برخی از پردازشهای متداول رو هم به بسته اضافه کنم. چیزی مثل محاسبه رشد قیمت یا اجرای یک مدل سریزمانی برای پیشبینی(مثل ARIMA) و حتی اضافهکردن محاسبه شاخصهای تکنیکال. توی این مسیر خوشحال میشم که نیازها و پیشنهادهای خودتون را از طریق تلگرام، توییتر و یا از طریق گیتهاب با من در میان بگذارید.
+ ممنون میشم که این بسته رو به دوستان خودتون معرفی کنید و اگر دوست داشتید یک ستاره در گیتهاب بهش اعطا کنید.
+ این بسته لیسانسش رو از MIT گرفته در نتیجه میتونید این بسته رو برای هر نیتی و با هر عنوان منتشر کنید و از اون برای بهتر کردن فعالیتهاتون استفاده کنید و اگر مایل بودید به بهتر شدن این بسته کمک کنید.