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

توضیحات بیشتر در مورد میانگین متحرک

میانگین متحرک (Moving Average) یکی از شاخص‌های مهم و کاربردی فراوان، در تحلیل تکنیکال است، که با حذف نوسانات قیمتی کمک می‌کند، تا سرمایه‌گذار بتواند تصویر بهتری از متوسط قیمت و روند قیمتی را ترسیم کند.

میانگین متحرک یکی از شاخص‌های قیمتی دنباله‌رو است، چرا که متوسط قیمت سهام در گذشته را نشان می‌دهد (برای مثال ۵۰، ۱۰۰ یا ۲۰۰ روز گذشته).

دو نوع میانگین متحرک وجود دارد: میانگین متحرک ساده (Simple Moving Average: SMA) و میانگین متحرک نمایی (Exponential Moving Average: EMA). میانگین متحرک ساده تنها متوسطی از قیمت سهام، در بازه‌ی زمانی مورد نظر است (همان‌طوری که یک دانش آموز میانگین نمراتش را حساب کرده و نام آن را معدل می‌گذارد)، ولی نحوه‌ی محاسبه میانگین متحرک نمایی به‌صورتی است، که هر چه قیمت به انتهای بازه‌ی زمانی (قیمت فعلی) نزدیک‌تر می‌شود، وزن سنگین‌تری را در محاسبه میانگین ایفا می‌کند. به بیانی دیگر میانگین متحرک نمایی همان میانگین وزن‌دار متوسط قیمت است، که قیمت‌های اخیر، وزن بیشتری را در محاسبه دربردارند. برای مطالعه‌ی بیشتر در مورد این شاخص می‌توانید به ویکی‌پدیا مراجعه کنید.

برای محاسبه‌ی میانگین متحرک kkتایی روی nn داده از عضو اول شروع کرده (تا پایان عضو nk+1n-k+1ام) و پنجره‌های kkتایی جدا کرده و میانگین هر پنجره را حساب می‌کنیم. برای درک بهتر تصویر زیر را مشاهده نمایید:

توضیح تصویر

در جدول بالا پنجره‌های به طول ۴ از ستون Data‍‍ جدا و میانگین هر پنجره به ترتیب از اول در ستون Moving Average وارد شده است.

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

نحوه ارسال

تابع زیر را با نام moving_average پیاده‌سازی کرده و در یک فایل پایتون ذخیره و آپلود نمایید. ورودی تابع یک آرایه‌ی نامپای (np.array) با نام data_list و اندازه‌ی پنجره یعنی window_size است و خروجی آن نیز باید به‌صورت یک آرایه‌ی نامپای باشد که طول آن برابر len(data_list) - window_size + 1 است.

import numpy as np
def moving_average(data_list, window_size):
	# TO-DO
Python

کد خود را در فایلی به نام q1.py ذخیره کرده و جهت داوری در سامانه آپلود کنید. توجه داشته باشید که در این تابع تنها مجاز به استفاده از کتابخانه‌ی نامپای (numpy) هستید. همچنین از هرگونه قبل از ارسال از نبود دستور پرینت در کد ارسالی خود اطمینان حاصل نمایید.

هشدار

فراموش نکنید که قبل از پایان زمان مسابقه، باید تمامی کد‌های این مسابقه را از قسمت بارگذاری کُد برای ما ارسال کنید. در غیر این‌صورت، شما از این مسابقه، امتیازی کسب نمی‌کنید.

توجه داشته باشید که اگر از jupter notebook استفاده می‌کنید بایستی همانند توضیحات قسمت بارگذاری کُد، خروجی .py را دریافت و برای ارسال در نظر بگیرید. ارسال فایل‌های jupyter همانند ‍‍.ipynb مورد قبول نیستند.

نمونه ورودی

data_list = np.array([1,5,3,4,4]), window_size = 3
Python

خروجی

np.array([3.0,4.0,3.67])
Python

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.