پیاده سازی اندیکاتور مکدی MACD در پایتون — راهنمای گام به گام

۸۴۹ بازدید
آخرین به‌روزرسانی: ۷ شهریور ۱۴۰۲
زمان مطالعه: ۱۱ دقیقه
دانلود PDF مقاله
پیاده سازی اندیکاتور مکدی MACD در پایتون — راهنمای گام به گامپیاده سازی اندیکاتور مکدی MACD در پایتون — راهنمای گام به گام

میانگین‌های متحرک (Moving Average یا MA) به‌تنهایی ابزارهایی ساده و بسیار کاربردی هستند که در اغلب ابزارهای «تحلیل تکنیکال» (Technical Analysis) ردپایی از آن‌ها دیده می‌شود. یکی از این ابزارها، اندیکاتور همگرایی-واگرایی میانگین متحرک (MACD یا Moving Average Convergence-Divergence) یا مکدی است. در این آموزش از «مجله فرادرس»، به پیاده سازی اندیکاتور مکدی MACD در پایتون می‌پردازیم.

997696

آشنایی با اندیکاتور مکدی (MACD)

در این اندیکاتور ابتدا با تعیین L1L_1 و L2L_2 دو میانگین متحرک نمایی (Exponential Moving Average یا EMA) با طول پنجره متفاوت بر روی قیمت محاسبه می‌شود:

EMA1t=EMAt(Close ,L1)EMA2t=EMAt(Close ,L2)\begin{aligned} &E M A 1_{t}=E M A_{t}\left(\text {Close }, L_{1}\right) \\ &E M A 2_{t}=E M A_{t}\left(\text {Close }, L_{2}\right) \end{aligned}

توجه داشته باشید که L1L_1 همواره باید کوچک‌تر از L2L_2 باشد. سپس اختلاف بین این دو میانگین متحرک به شکل زیر محاسبه می‌شود و مقدار حاصل MACD نامیده می‌شود:

MACDt=EMA1tEMA2tM A C D_{t}=E M A 1_{t}-E M A 2_{t}

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

در این مرحله با تعیین یک LsL_s که طول میانگین متحرک سیگنال است، از خط MACD یک میانگین متحرک نمایی گرفته می‌شود:

Signalt=EMAt(MACD,Ls){Signal}_{t}=E M A_{t}\left(M A C D, L_{s}\right)

بنابراین، می‌توانیم حدس بزنیم که حرکت خط Signal کندتر از MACD خواهد بود. اختلاف این دو خط را نیز به عنوان معیار جدیدی به نام هیستوگرام (Histogram) نشان می‌دهیم:

Histogramt=MACDtSignalt { Histogram }_{t}=M A C D_{t}- { Signal }_{t}

 به این ترتیب، در خروجی سه خط با نام‌های MACD و Signal و Histogram خواهیم داشت.

برای L1L_1 و L2L_2 و LsL_s معمولاً، به‌ترتیب، از اعداد ۱۲ و ۲۶ و ۹ استفاده می‌شود که تنظیمات مشهوری بوده و نتایج خوبی را ایجاد می‌کند.

اندیکاتور MACD سیگنال‌های متنوعی می‌تواند ایجاد کند که هرکدام در شرایطی از اعتبار بالایی برخوردار هستند. برای آشنایی بیشتر با اندیکاتور MACD می‌توانید به مطلب «اندیکاتور MACD چیست؟ آموزش تصویری و به زبان ساده» مراجعه کنید.

دریافت و رسم مجموعه داده

حال وارد محیط برنامه‌نویسی می‌شویم و کتابخانه‌های مورد نیاز را فراخوانی می‌کنیم:

1import numpy as np
2import pandas as pd
3import yfinance as yf
4import matplotlib.pyplot as plt

این 4 کتابخانه به ترتیب برای موارد زیر کاربرد دارند:

  1. کار با آرایه (Array) و محاسبات برداری (Vectorized Computation)
  2. کار با دیتافریم‌ها (Data Frame)
  3. دریافت داده از طریق API مربوط به Yahoo Finance
  4. رسم نمودار قیمت و اندیکاتور

حال تنظیمات زیر را برای نمودارها اعمال می‌کنیم تا ظاهر نمودارها مناسب باشد:

1plt.style.use('ggplot')

حال می‌توانیم مجموعه داده مربوط به شاخص بورس نزدک یا NASDAQ را دریافت کنیم. به این منظور از تابع yfinance.download استفاده می‌کنیم:

1DF = yf.download('^IXIC', start='2018-01-01', end='2022-01-01')

نماد مربوط به شاخص نزدک در Yahoo Finance به شکل IXIC^ است که برای یافتن آن‌ها می‌توان به سایت Yahoo Finance مراجعه کرد. حال برای بررسی مجموعه داده دریافتی، می‌توانیم از دو متد head و tail استفاده کنیم:

1print(DF.head())
2
3print(DF.tail())

که در خروجی خواهیم داشت:

                   Open         High          Low        Close    Adj Close      Volume
Date
2018-01-02  6937.649902  7006.910156  6924.080078  7006.899902  7006.899902  1914930000
2018-01-03  7017.069824  7069.149902  7016.700195  7065.529785  7065.529785  2166780000
2018-01-04  7089.500000  7098.049805  7072.379883  7077.910156  7077.910156  2098890000
2018-01-05  7105.740234  7137.040039  7097.080078  7136.560059  7136.560059  2020900000
2018-01-08  7135.379883  7161.350098  7124.089844  7157.390137  7157.390137  2051430000
                    Open          High           Low         Close     Adj Close      Volume
Date
2021-12-27  15696.830078  15871.400391  15696.830078  15871.259766  15871.259766  3730120000
2021-12-28  15895.200195  15901.469727  15757.070312  15781.719727  15781.719727  3623600000
2021-12-29  15794.919922  15821.809570  15679.849609  15766.219727  15766.219727  3694500000
2021-12-30  15758.980469  15868.089844  15729.160156  15741.559570  15741.559570  3732730000
2021-12-31  15722.910156  15777.429688  15643.940430  15644.969727  15644.969727  3379850000

به این ترتیب، می‌توان تا حدود زیادی از درستی مجموعه داده اطمینان یافت. حال می‌توانیم نمودار مربوط به ستون Close را نیز رسم و از روند شاخص مطلع شویم. برای این منظور، می‌توان هر دو روش زیر را در پیش گرفت و به نمودار رسید:

  1. رسم ستون مربوط به Close با استفاده از تاریخ
  2. رسم ستون مربوط به Close پس از تبدیل به آرایه با استفاده از شماره داده

برای مورد اول، می‌توانیم به شکل زیر عمل کنیم:

1plt.semilogy(DF['Close'], ls='-', lw=0.9, c='k')
2plt.title('NASDAQ Composite')
3plt.xlabel('Date')
4plt.ylabel('Value')
5plt.show()

در این شرایط مجموعه داده را به آرایه Numpy تبدیل نمی‌کنیم و مقادیر محور افقی نیز تاریخ روزها است. در خروجی نمودار زیر حاصل می‌شود.

مکدی در پایتون

به این ترتیب، نمودار مورد نظر حاصل می‌شود. حال برای حالت دوم از رسم نمودار، ابتدا مقادیر ستون Close را به شکل آرایه Numpy دریافت می‌کنیم:

1C = DF['Close'].to_numpy()

حال یک آرایه دیگر به‌عنوان شماره روزها ایجاد می‌کنیم. بدین منظور، تابع numpy.arange مناسب است:

1T = np.arange(start=1, stop=C.size + 1, step=1)

حال می‌توانیم رسم نمودار را دوباره تکرار کنیم:

1plt.semilogy(T, C, ls='-', lw=0.9, c='k')
2plt.title('NASDAQ Composite')
3plt.xlabel('Time (Day)')
4plt.ylabel('Value')
5plt.show()

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

پیاده سازی اندیکاتور MACD

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

بنابراین، روند کلی نماد و صحت مقادیر آن قابل مشاهده است. حال می‌توانیم اندیکاتور MACD را پیاده‌سازی کنیم.

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

  • برای مشاهده مجموعه آموزش‌های برنامه نویسی پایتون (Python) — مقدماتی تا پیشرفته + اینجا کلیک کنید.

پیاده‌سازی اندیکاتور MACD با استفاده از Numpy

بر اساس رای ۹ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
مجله فرادرس
۳ دیدگاه برای «پیاده سازی اندیکاتور مکدی MACD در پایتون — راهنمای گام به گام»

سلام
مطالبتون حرف نداره عالیه
جسارتا برای این مقاله هایی که منتشر کردید منبعی دارید یا خودتون پیاده سازی کردید؟؟
میخوام برای پروژه دانشگاهی از مطالبتون استفاده کنم و برای قبول کردن کارم ازم منبع معتبر میخوان
با تشکر

با سلام؛

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

با تشکر از همراهی شما با مجله فرادرس

بی نهایت ممنون / اموزش تخصصی و جالب بود

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *