فهرست
در این درس فرض بر این است که شما با python و کتابخانههای pandas و matplotlib آشنایی دارید. اگر فکر میکنید به شناخت بیشتر آنها نیاز دارید به دورههای آموزشی زیر مراجعه کنید:
دادههای معاملات بازار بورس آمریکا
برای تهیه گزارش، تحلیل، تصمیمگیری و معاملهگری در بازار سرمایه قبل از هر چیز نیازمند داده هستیم. در این درس تمامی مفاهیم مالی و محاسبات مربوط به آن را روی دادههای بورس آمریکا پیادهسازی میکنیم. تمامی مفاهیم و روشهایی که در این درس ارائه میشود روی دادههای دیگر بازارها نیز قابلیت پیادهسازی دارد.
دریافت داده از یاهو فایننس
یکی از بهترین منابع دادههای بازار سهام در آمریکا yahoo finance است. شما در این وب سایت میتوانید به قیمت روزانه سهام و گزارشهای مالی شرکتهای آمریکایی فهرست شده در بازار سهام این کشور دسترسی پیدا کنید.
برای دریافت داده از وب سایت yahoo finance در محیط پایتون از کتابخانه yfinance
استفاده میکنیم. این کتابخانه را میتوانید با دستور زیر نصب کنید
pip install yfinance
بعد از نصب، برای فراخوان باید از دستور زیر استفاده کنید.
import yfinance as yf
از آنجا که در درسهای بعدی نیز منبع اصلی دادهها وبسایت yahoo finance خواهد بود این دوره را با همین موضوع شروع کردیم.
نکته: برای گرفتن دادههای یک شرکت در yahoo finance باید از نماد استفاده کنید. برای پیدا کردن نماد یک سهم میتوایند از خود وب سایت استفاده کنید و همان طور که از عکس زیر مشخص است نماد سهام شرکت اپل APPL
است و باید از آن استفاده کنید.
برای گرفتن قیمت سهام از دستور download
از کتابخانه yfinance
استفاده میکنیم.
import yfinance as yf
data = yf.download("AAPL", period="1mo")
data
ستونهای این جدول شامل اولین قیمت معامله در روز (Open
)، بالاترین قیمت (High
)، پایینترین (Low
)، آخرین قیمت (Close
)، قیمت تعدیلشده (Adj Close
) و حجم معاملات (Volume
) است که قیمت تعدیل شده از میانگین قیمت وزنی معاملات بدست میآید.
کتابخانه yfinance از پانداس استفاده میکند. به همین خاطر جدولی که با این روش ایجاد میشود یک دیتافریم است.
type(data)
pandas.core.frame.DataFrame
ترسیم اولین نمودار
به عنوان نمونه اگر بخواهید با قیمت تعدیل شده کار کنید و آن را مورد بررسی قرار دهید میتوانید با استفاده از دستور plot
آن را به صورت زیر ترسیم کنید. دیتافریمهای پانداس متدی به نام plot
برای سادهتر کردن مصورسازی داده دارند.
data["Adj Close"].plot()
دریافت دادههای چند سهم
در بیشتر موارد برای تحلیل دادههای سهام لازم است که دادههای چندین سهم به صورت همزمان دریافت شوند. برای دریافت چنین دادهای کافی است که بین نمادها یک کاراکتر فاصله قرار دهید.
import yfinance as yf
data = yf.download("AAPL AMZN MSFT", period="1mo")
data
مطابق دستورات متداول برای فراخوانی مقادیر در دیتافریمهای پانداس، اگر فقط با آخرین قیمت مایکروسافت کار داشته باشیم از دستور زیر استفاده میکنیم
data["Close"]["MSFT"]
برای مقایسه منحنی تغییرات قیمت سه سهم اپل، مایکروسافت و امازون کافی است نام سرستون مربوطه فراخوانی و از دستور plot استفاده کنیم.
data["Adj Close"].plot(figsize=(10,6))
تعیین دوره
برای دریافت دادههای مربوط به زمانهای متفاوت میتوان بازه زمانی را در متغیر ورودی period
تعیین کرد و بین یک روز تا کل داده متغییر باشد. مقادیر که این دستور میپذیرد شامل 1d
, 5d
, 1mo
, 3mo
, 6mo
, 1y
, 2y
, 5y
, 10y
, ytd
, max
است.
import yfinance as yf
data = yf.download("AAPL", period="1y")
data
بازه زمانی دلخواه
برای گرفتن داده در بازه زمانی دلخواه کافی است تاریخ شروع و پایان آن را با دستورهای start و end تعیین کنید.
import yfinance as yf
data = yf.download("AAPL", start="2020-01-01", end="2023-06-30")
data["Open"].plot(figsize = (10,6))
فاصلههای زمانی
در بسیاری از موارد دادههای روزانه برای تحلیل مناسب نیست و نیاز است در یک دوره مشخص با فاصلههای زمانی (Time frame) کوچکتر یا بزرگتر کار شود. در حالت پیشفرض فاصلههای زمانی هنگام دریافت داده به صورت روزانه است، اما برای کارکردن با بازههای زمانی متفاوت میتوان از دستور interval
استفاده کرد.
import yfinance as yf
data = yf.download("AAPL", period="5d" , interval = "15m")
data