معاملات الگوریتمی و کد پایتون اندیکاتور میانگین متحرک نمایی

سلام

این مطلب رو برای کسایی نوشتم که مثه خودم به معاملات الگوریتمی و موضوعات تو اون هول و حوش علاقمند هستند.

وگرنه حق دارید که جمله زیر از ذهنتون گذر کنه :

نوشتن کد پایتون اندیکاتور میانگین متحرک نمایی؟! که چی بشه؟!هر سایتی که نمودار قیمت سهام رو بتونه بهم نشون بده قطعا اسیلاتورها و اندیکاتور های خیلی پیچیده تر رو هم با یک کلیک میتونه میتونه برام فراهم کنه.

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

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

استفاده از تحلیل تکنیکال برای خرید و فروش سهام چیزیه که اکثر سرمایه گذارها تو بازار های مالی ازش استفاده میکنن.

تحلیل تکنیکال رو شاید بشه به دو قسمت کلی : الگوهای نموداری و اندیکاتور ها تقسیم کرد.

از اونجایی که کمی سازی (کد کردن) الگوهای نموداری کمی مشکل و پیچیده است استفاده کردن از اندیکاتور ها برای ایجاد معاملات خودکار مرسوم تره.

اندیکاتورها با استفاده از محاسبات ریاضی سعی در پیش بینی بازار دارند.

در اینجا من قصد دارم اولا اطلاعات مربوط به سهام شرکت گوگل رو با پایتون ایمپورت کنم بعد کد اندیکاتور میانگین متحرک نمایی رو نوشته و نمودارشو رسم کنم.

خب با دریافت کردن اطلاعات سهام شرکت گوگل شروع می کنیم.

برای اینکار شما لازم دارید که کتابخونه pandas_datareader رو نصب داشته باشید ؛ اگر ندارید همین حالا نصبش کنید و بعد کد زیر رو اجرا کنید تا اطلاعات مربوط به سهام شرکت گوگل رو تو تاریخ های مشخص شده دریافت کنید:

from pandas_datareader import data
start_date = '2014-01-01'
end_date = '2018-01-01'
goog_data = data.DataReader('GOOG', 'yahoo', start_date, end_date)

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

goog_data


ما با ستون Adj Close (که نشون دهنده قیمت تعدیل شده است) برای محاسبه اندیکاتور کار می کنیم.

حالا کد زیر رو که برامون میانگین متحرک نمایی یا EMA رو برای این سهم محاسبه میکنه رو اجرا می کنیم.(من دوره زمانی رو 20 روزه در نظر گرفتم.)

#exponential moving average
import pandas as pd
time_period=20
k=(2/(time_period+1))
ema_p=0
ema_values=[]
for i in range(len(goog_data['Adj Close'])):
    if (ema_p==0):
        ema_p=goog_data['Adj Close'][i]
    else:
        ema_p=ema_p+k*(goog_data['Adj Close'][i]-ema_p)
    ema_values.append(ema_p)
ema_values=pd.Series(ema_values,index=goog_data.index)

و نهایتا در مرحله آخر با ایمپورت کردن کتابخونه matplotlib.pyplot هم نمودار قیمتی سهم و هم میانگین متحرک نمایی( با دوره 20 روزه) رو یکجا رسم می کنیم.

import matplotlib.pyplot as plt
fig=plt.figure(figsize=(30,10))
ax1=fig.add_subplot(111, ylabel='Google price in $')
goog_data['Adj Close'].plot(ax=ax1, color='g', lw=2., legend=True,label='Price')
ema_values.plot(ax=ax1, color='r', lw=2., legend=True,label='EMA20Days')
plt.show()
آیا این EMA بیست روزه به تنهایی میتونه برای ساختن یک استراتژی معاملاتی کمکمون کنه؟!
آیا این EMA بیست روزه به تنهایی میتونه برای ساختن یک استراتژی معاملاتی کمکمون کنه؟!


حالا بحث اینکه چطوری میشه از این اندیکاتور برای طراحی یک استراتژی معاملاتی استفاده کرد یه متن دیگه رو میطلبه.فعلا خواستم فقط بعد از مدت ها دوباره به عادت خوب بلاگ نویسی برگردم.(با اینکه می دونید کار و مشغله های روزمره امون آدم رو میبره.)

امیدوارم این نوشته به دردتون خورده باشه.حقیقت اینه که با کلی تنبلی این متن رو نوشتم.(حتی خودم یاد نویسنده کتاب معروف "اصول آنالیز ریاضی" یعنی "والتر رودین" افتادم.کسایی که ریاضی خوندن میدونن چقدر مختصر و مفید حرف میزنه رودین=))) )

راستی خوشحال کننده خواهد بود اگر نظراتتون رو برام کامنت کنید *_*

کانال تلگرام من