در این سوال از شما میخواهیم میانگین متحرک روی یک لیست از اعداد را محاسبه کنید.
توضیحات بیشتر در مورد میانگین متحرک
میانگین متحرک (Moving Average) یکی از شاخصهای مهم و کاربردی فراوان، در تحلیل تکنیکال است، که با حذف نوسانات قیمتی کمک میکند، تا سرمایهگذار بتواند تصویر بهتری از متوسط قیمت و روند قیمتی را ترسیم کند.
میانگین متحرک یکی از شاخصهای قیمتی دنبالهرو است، چرا که متوسط قیمت سهام در گذشته را نشان میدهد (برای مثال ۵۰، ۱۰۰ یا ۲۰۰ روز گذشته).
دو نوع میانگین متحرک وجود دارد: میانگین متحرک ساده (Simple Moving Average: SMA) و میانگین متحرک نمایی (Exponential Moving Average: EMA). میانگین متحرک ساده تنها متوسطی از قیمت سهام، در بازهی زمانی مورد نظر است (همانطوری که یک دانش آموز میانگین نمراتش را حساب کرده و نام آن را معدل میگذارد)، ولی نحوهی محاسبه میانگین متحرک نمایی بهصورتی است، که هر چه قیمت به انتهای بازهی زمانی (قیمت فعلی) نزدیکتر میشود، وزن سنگینتری را در محاسبه میانگین ایفا میکند. به بیانی دیگر میانگین متحرک نمایی همان میانگین وزندار متوسط قیمت است، که قیمتهای اخیر، وزن بیشتری را در محاسبه دربردارند. برای مطالعهی بیشتر در مورد این شاخص میتوانید به ویکیپدیا مراجعه کنید.
برای محاسبهی میانگین متحرک $k$تایی روی $n$ داده از عضو اول شروع کرده (تا پایان عضو $n-k+1$ام) و پنجرههای $k$تایی جدا کرده و میانگین هر پنجره را حساب میکنیم. برای درک بهتر تصویر زیر را مشاهده نمایید:
در جدول بالا پنجرههای به طول ۴ از ستون 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
کد خود را در فایلی به نام q1.py
ذخیره کرده و جهت داوری در سامانه آپلود کنید. توجه داشته باشید که در این تابع تنها مجاز به استفاده از کتابخانهی نامپای (numpy
) هستید. همچنین از هرگونه قبل از ارسال از نبود دستور پرینت در کد ارسالی خود اطمینان حاصل نمایید.
هشدار
فراموش نکنید که قبل از پایان زمان مسابقه، باید تمامی کدهای این مسابقه را از قسمت بارگذاری کُد برای ما ارسال کنید. در غیر اینصورت، شما از این مسابقه، امتیازی کسب نمیکنید.
توجه داشته باشید که اگر از jupter notebook
استفاده میکنید بایستی همانند توضیحات قسمت بارگذاری کُد، خروجی .py
را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای jupyter
همانند .ipynb
مورد قبول نیستند.
نمونه ورودی
data_list = np.array([1,5,3,4,4]), window_size = 3
خروجی
np.array([3.0,4.0,3.67])
ارسال پاسخ برای این سؤال