بازده و ریسک

نظریه سبد سهام مدرن

مدل قیمت‌گذاری دارایی‌های سرمایه‌ای

دارایی در خطر

شبیه سازی مونت کارلو

دسترسی به داده‌های مالی شرکت‌های بورسی در امریکا

فهرست

در این درس فرض بر این است که شما با python و کتابخانه‌های pandas و matplotlib آشنایی دارید. اگر فکر می‌کنید به شناخت بیشتر آن‌ها نیاز دارید به دوره‌های آموزشی زیر مراجعه کنید:

داده‌های معاملات بازار بورس آمریکا

برای تهیه گزارش، تحلیل، تصمیم‌گیری و معامله‌گری در بازار سرمایه قبل از هر چیز نیازمند داده هستیم. در این درس تمامی مفاهیم مالی و محاسبات مربوط به آن را روی داده‌های بورس آمریکا پیاده‌سازی می‌کنیم. تمامی مفاهیم و روش‌هایی که در این درس ارائه می‌شود روی داده‌های دیگر بازارها نیز قابلیت پیاده‌‍‌سازی دارد. 

دریافت داده از یاهو فایننس

یکی از بهترین منابع داده‌های بازار سهام در آمریکا yahoo finance است. شما در این وب سایت می‌توانید به قیمت روزانه سهام و گزارش‌های مالی شرکت‌های آمریکایی فهرست شده در بازار سهام این کشور دسترسی پیدا کنید.

برای دریافت داده از وب سایت yahoo finance در محیط پایتون از کتابخانه yfinance استفاده می‌کنیم. این کتابخانه را می‌توانید با دستور زیر نصب کنید

				
					pip install yfinance
				
			

بعد از نصب، برای فراخوان باید از دستور زیر استفاده کنید.

				
					import yfinance as yf
				
			

از آنجا که در درس‌های بعدی نیز منبع اصلی داده‌ها وب‌سایت yahoo finance خواهد بود این دوره را با همین موضوع شروع کردیم.

نکته: برای گرفتن داده‌های یک شرکت در yahoo finance باید از نماد استفاده کنید. برای پیدا کردن نماد یک سهم می‌توایند از خود وب سایت استفاده کنید و همان طور که از عکس زیر مشخص است نماد سهام شرکت اپل APPL است و باید از آن استفاده کنید.

AAPL

برای گرفتن قیمت سهام از دستور 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
				
			
03_apple_MSFT

مطابق دستورات متداول برای فراخوانی مقادیر در دیتافریم‌های پانداس، اگر فقط با آخرین قیمت مایکروسافت کار داشته باشیم از دستور زیر استفاده می‌کنیم

				
					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
				
			
Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors