تجارت الگوریتمی با MACD در پایتون

ساخت وبلاگ

یک راهنمای گام به گام برای اجرای یک استراتژی قدرتمند

معرفی

در مقاله قبلی این سری تجارت الگوریتمی ، دیدیم که چگونه می توان از گروههای بولینگر برای انجام معاملات موفق استفاده کرد. در این مقاله ، ما قصد داریم یک شاخص فنی قدرتمند دیگر را کشف کنیم که یکی از محبوب ترین در بین بازرگانان محسوب می شود. این کسی نیست جز حرکت همگرایی/واگرایی متوسط (MACD). ما ابتدا خواهیم فهمید که این شاخص معاملات در آن زمان چیست ، ما بر اساس این شاخص در پایتون ، یک استراتژی تجاری را اجرا خواهیم کرد و می خواهیم ببینیم که در دنیای واقعی چقدر خوب کار می کند. بیایید وارد مقاله شویم!

قبل از ادامه کار ، اگر می خواهید استراتژی های معاملاتی خود را بدون هیچ گونه برنامه نویسی پشت سر بگذارید ، راه حلی برای آن وجود دارد. این backtestzone است. این یک بستر برای حمایت از هر تعداد استراتژی معاملاتی در انواع مختلف دارایی های قابل تجارت به صورت رایگان و بدون برنامه نویسی است. می توانید بلافاصله با استفاده از پیوند در اینجا از ابزار استفاده کنید: https://www. backtestzone. com/

قبل از حرکت به MACD ، ضروری است بدانید که میانگین متحرک نمایی (EMA) به چه معنی است. EMA نوعی میانگین متحرک (MA) است که به طور خودکار وزن بیشتری را (چیزی جز اهمیت) به جدیدترین نقطه داده و وزن کمتری به نقاط داده در گذشته های دور اختصاص می دهد. به عنوان مثال ، یک مقاله سؤال شامل 10 ٪ از یک سؤال یک علامت ، 40 ٪ از سه سؤال علامت گذاری و 50 ٪ سوالات پاسخ طولانی است. از این مثال ، می توانید مشاهده کنید که ما بر اساس سطح اهمیت ، وزنهای منحصر به فرد را به هر بخش از مقاله اختصاص می دهیم (احتمالاً به سؤالات پاسخ طولانی اهمیت بیشتری نسبت به سؤالات یک علامت داده می شود).

اکنون ، MACD یک نشانگر پیشرو در روند است که با کم کردن دو میانگین متحرک نمایی (یکی با طولانی تر و دیگری دوره های کوتاه تر) محاسبه می شود. در یک شاخص MACD سه مؤلفه قابل توجه وجود دارد.

  • خط MACD: این خط تفاوت بین دو میانگین متحرک نمایی داده شده است. برای محاسبه خط MACD ، یک EMA با یک دوره طولانی تر به عنوان طول آهسته و یک EMA دیگر با یک دوره کوتاه تر معروف به طول سریع محاسبه می شود. محبوب ترین طول سریع و کند به ترتیب 12 ، 26 است. مقادیر نهایی خط MACD را می توان با کم کردن طول آهسته EMA از طول سریع EMA به دست آورد. فرمول محاسبه خط MACD را می توان به شرح زیر نشان داد:
  • خط سیگنال: این خط میانگین حرکت نمایی خط MACD برای یک دوره زمانی معین است. محبوب ترین دوره برای محاسبه خط سیگنال 9 است. از آنجا که ما به طور متوسط از خط MACD استفاده می کنیم ، خط سیگنال صاف تر از خط MACD خواهد بود.
  • هیستوگرام: همانطور که از نام آن پیداست ، یک هیستوگرام عمداً ترسیم شده است تا تفاوت بین خط MACD و خط سیگنال را نشان دهد. این یک مؤلفه عالی است که برای شناسایی روندها مورد استفاده قرار می گیرد. فرمول محاسبه هیستوگرام را می توان به شرح زیر نشان داد:

اکنون که ما دقیقاً درک کرده ایم که MACD دقیقاً چیست. بیایید در مورد استراتژی معاملاتی که می خواهیم بسازیم ، شهود کسب کنیم.

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

قبل از حرکت ، یادداشتی در مورد سلب مسئولیت: تنها هدف این مقاله آموزش مردم است و باید به عنوان یک قطعه اطلاعاتی در نظر گرفته شود اما نه به عنوان مشاوره سرمایه گذاری یا همینطور.

اجرای در پایتون

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

ما سفارش ذکر شده در لیست بالا را دنبال خواهیم کرد و کمربندهای صندلی خود را جمع می کنیم تا هر قسمت کدگذاری آینده را دنبال کنید.

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

وارد کردن بسته های مورد نیاز به محیط پایتون یک گام غیر قابل قبول است. بسته های اصلی برای کار با داده ها ، Numpy برای کار با آرایه ها و برای توابع پیچیده ، matplotlib برای اهداف ترسیم و درخواست های ایجاد تماس های API قرار است. بسته های ثانویه برای کارکردهای ریاضی و Termcolor برای سفارشی سازی قلم (اختیاری) ریاضی خواهند بود.

اجرای پایتون:

اکنون که همه بسته های اساسی را به محیط پایتون وارد کرده ایم. بیایید با کشیدن داده های تاریخی Google با API سهام قدرتمند Alpha Vantage ادامه دهیم.

مرحله 2: استخراج داده ها از Alpha Vantage

در این مرحله ، ما قصد داریم داده های تاریخی Google را با استفاده از نقطه پایانی API ارائه شده توسط Alpha Vantage بکشیم. قبل از آن ، یادداشتی در مورد Alpha Vantage: Alpha Vantage API های سهام رایگان را ارائه می دهد که از طریق آن کاربران می توانند به طیف گسترده ای از داده ها مانند به روزرسانی های زمان واقعی و داده های تاریخی در مورد سهام ، ارزها و ارزهای رمزنگاری دسترسی پیدا کنند. اطمینان حاصل کنید که یک حساب کاربری در مورد Alpha Vantage دارید ، فقط در این صورت ، می توانید به کلید API مخفی خود دسترسی پیدا کنید (یک عنصر مهم برای کشیدن داده ها با استفاده از API).

اجرای پایتون:

خروجی:

توضیح کد: اولین کاری که ما انجام دادیم تعریف تابعی به نام "get_historical_data" است که نماد سهام ("نماد") را به عنوان یک پارامتر مورد نیاز و تاریخ شروع داده های تاریخی ("start_date") به عنوان یک پارامتر اختیاری می گیرد. در داخل عملکرد ، ما کلید API و URL را تعریف می کنیم و آنها را در متغیر مربوطه ذخیره می کنیم. در مرحله بعد ، ما داده های تاریخی را در قالب JSON با استفاده از عملکرد "دریافت" استخراج می کنیم و آن را در متغیر "RAW_DF" ذخیره می کنیم. پس از انجام برخی فرآیندها برای تمیز کردن و قالب بندی داده های RAW JSON ، ما آن را به صورت یک داده پاک Pandas Dataframe باز می گردانیم. سرانجام ، ما در حال استفاده از عملکرد ایجاد شده برای بیرون کشیدن داده های تاریخی Google از شروع سال 2020 هستیم و آن را در متغیر "Googl" ذخیره کردیم.

مرحله 3: محاسبه MACD

در این مرحله ، ما قصد داریم تمام مؤلفه های شاخص MACD را از داده های تاریخی استخراج شده Google محاسبه کنیم.

اجرای پایتون:

خروجی:

توضیح کد: اولا ، ما تابعی به نام "GET_MACD" را تعریف می کنیم که قیمت سهام ("قیمت") ، طول EMA کند ("کند") ، طول EMA سریع ("سریع") و دوره را می گیرد. خط سیگنال ("صاف").

در داخل عملکرد ، ما ابتدا EMA های سریع و آهسته را با استفاده از عملکرد "EWM" ارائه شده توسط پاندا محاسبه می کنیم و آنها را به ترتیب در متغیرهای "EMA1" و "EMA2" ذخیره می کنیم. در مرحله بعد ، ما مقادیر خط MACD را با کم کردن طول آهسته EMA از EMA با طول سریع محاسبه کردیم و آن را در متغیر "MACD" به شکل یک داده پاندا ذخیره کردیم. به دنبال آن ، ما متغیر به نام "سیگنال" را برای ذخیره مقادیر خط سیگنال محاسبه شده با گرفتن EMA از مقادیر خط MACD ("MACD") برای تعداد مشخصی از دوره ها تعریف کردیم. سپس ، ما مقادیر هیستوگرام را با تفریق مقادیر خط MACD ("MACD") از مقادیر خط سیگنال ("سیگنال") محاسبه کردیم و آنها را در متغیر "HIST" ذخیره کردیم.

سرانجام ، ما تمام مقادیر محاسبه شده را در یک DataFrame با استفاده از عملکرد "Concat" توسط بسته PANDAS ترکیب کردیم و DataFrame نهایی را برگردانیم. با استفاده از تابع ایجاد شده ، ما تمام اجزای MACD را که از قیمت سهام Google محاسبه می شوند ذخیره کردیم و آن را در متغیر "Googl_Macd" ذخیره کردیم. از خروجی ، می بینید که DataFrame ما تمام مؤلفه هایی را که قبلاً در مورد آنها بحث کرده ایم ، دارد.

مرحله 4: طرح MACD

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

اجرای پایتون:

خروجی:

ما قصد نداریم به جای آن که برای تولید نقشه MACD فوق استفاده شود ، به عمق شیرجه برویم ، قصد داریم در مورد طرح بحث کنیم. در این طرح دو صفحه وجود دارد: پانل بالا طرح قیمت های نزدیک Google است و صفحه پایین مجموعه ای از قطعات از اجزای MACD محاسبه شده است. بیایید بشکنیم و هر مؤلفه را ببینیم.

اولین و قابل مشاهده ترین مؤلفه در پانل پایین بدیهی است که طرح مقادیر هیستوگرام محاسبه شده است. می توانید توجه داشته باشید که هر زمان که بازار روند منفی را نشان می دهد و هر زمان که بازار روند مثبتی را نشان می دهد ، قرمز می شود. این ویژگی از طرح هیستوگرام هنگام شناسایی روند بازار بسیار مفید می شود. طرح هیستوگرام هر زمان که تفاوت بین خط MACD و خط سیگنال بسیار زیاد باشد ، بزرگتر می شود و قابل توجه است که طرح هیستوگرام در مواقعی کوچک می شود که تفاوت بین دو مؤلفه دیگر را نشان می دهد ، نسبتاً کوچکتر است.

دو مؤلفه بعدی خط MACD و خط سیگنال هستند. خط MACD طرح خط به رنگ خاکستری است که تفاوت بین EMA طول آهسته و EMA با طول سریع قیمت سهام Google را نشان می دهد. به طور مشابه ، طرح خط به رنگ آبی خط سیگنال است که نشان دهنده EMA خط MACD است. همانطور که قبلاً بحث کردیم ، به نظر می رسد خط سیگنال بیشتر نسخه صاف خط MACD است زیرا با میانگین مقادیر خود خط MACD محاسبه می شود. این در مورد نمودار است که در بالا به عنوان خروجی نشان داده شده است. بیایید به مرحله بعدی برویم.

مرحله 5: ایجاد استراتژی تجارت

در این مرحله ، ما قصد داریم استراتژی تجاری MACD را در پایتون اجرا کنیم.

اجرای پایتون:

توضیح کد: اول ، ما در حال تعریف تابعی به نام "پیاده سازی_MACD_Strategy" هستیم که قیمت سهام ("داده") و داده های MACD ("داده") را به عنوان پارامترها می گیرد.

در داخل عملکرد ، ما در حال ایجاد سه لیست خالی (buy_price ، sell_price و macd_signal) هستیم که در آن مقادیر هنگام ایجاد استراتژی تجارت ضمیمه می شوند.

پس از آن ، ما در حال اجرای استراتژی تجارت از طریق یک حلقه برای حلقه هستیم. در داخل حلقه ، ما شرایط خاصی را پشت سر می گذاریم و اگر شرایط راضی باشد ، مقادیر مربوطه به لیست های خالی اضافه می شوند. اگر شرط خرید سهام راضی شود ، قیمت خرید به لیست "buy_price" اضافه می شود و مقدار سیگنال به عنوان 1 نماینده برای خرید سهام ضمیمه می شود. به همین ترتیب ، اگر شرط فروش سهام برآورده شود ، قیمت فروش به لیست "sell_price" اضافه می شود و ارزش سیگنال به عنوا ن-1 نماینده برای فروش سهام ضمیمه می شود.

سرانجام ، ما لیست های ضمیمه شده با مقادیر را برمی گردانیم. سپس ، ما در حال استفاده از عملکرد ایجاد شده و مقادیر را در متغیرهای مربوطه آنها ذخیره می کنیم. این لیست معنی ندارد مگر اینکه مقادیر را ترسیم کنیم. بنابراین ، بیایید مقادیر لیست های معاملاتی ایجاد شده را ترسیم کنیم.

مرحله 6: ترسیم لیست های معاملاتی

در این مرحله ، ما می خواهیم لیست های معاملاتی ایجاد شده را ترسیم کنیم تا از آنها معنا پیدا کند.

اجرای پایتون:

خروجی:

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

مرحله 7: ایجاد موقعیت ما

در این مرحله ، ما قصد داریم لیستی را ایجاد کنیم که اگر سهام را در اختیار نداریم یا سهام خود را نگه نداریم ، 1 را نشان می دهد.

اجرای پایتون:

خروجی:

توضیح کد: اول ، ما یک لیست خالی به نام "موقعیت" ایجاد می کنیم. ما در حال عبور از دو حلقه برای ما هستیم ، یکی این است که مقادیر لیست "موقعیت" را تولید کنیم تا فقط با طول لیست "سیگنال" مطابقت داشته باشد. حلقه دیگر موردی است که ما برای تولید مقادیر موقعیت واقعی از آن استفاده می کنیم. در داخل حلقه دوم ، ما در حال تکرار مقادیر لیست "سیگنال" هستیم و مقادیر لیست "موقعیت" در مورد اینکه چه وضعیتی راضی می شود ، ضمیمه می شوند. اگر سهام خود را نگه داریم یا اگر سهام خود را بفروشیم یا سهام خود را نداشته باشیم ، ارزش موقعیت باقی می ماند. سرانجام ، ما در حال انجام برخی از دستکاری های داده برای ترکیب همه لیست های ایجاد شده در یک DataFrame هستیم.

از خروجی که نشان داده شده است ، می بینیم که در ردیف اول موقعیت ما در سهام 1 باقی مانده است (از آنجا که هیچ تغییری در سیگنال MACD وجود ندارد) اما موقعیت ما به طور ناگهانی به 0 تبدیل شد زیرا ما وقتی سهام را فروختیم ، سهام را فروختیم. سیگنال معاملاتی نشان دهنده یک سیگنال فروش (-1) است. اکنون زمان آن رسیده است که برخی از فرآیندهای پشتی را اجرا کنیم!

مرحله 8: پشتی

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

اجرای پایتون:

خروجی:

توضیح کد: اول ، ما بازده سهام Google را با استفاده از عملکرد "Diff" ارائه شده توسط بسته NUMPY محاسبه می کنیم و ما آن را به عنوان یک DataFrame در متغیر "Googl_ret" ذخیره کرده ایم. در مرحله بعد ، ما برای محاسبه بازده هایی که از استراتژی معاملات MACD به دست آورده ایم ، یک حلقه را برای تکرار مقادیر متغیر "Googl_ret" می گذرانیم ، و این مقادیر بازده به لیست "MacD_Strategy_ret" اضافه می شود. در مرحله بعد ، ما لیست "macd_strategy_ret" را به یک dataframe تبدیل می کنیم و آن را در متغیر "macd_strategy_ret_df" ذخیره می کنیم.

بعد روند پشتی می آید. ما می خواهیم با سرمایه گذاری صد هزار دلار در استراتژی تجارت خود ، استراتژی خود را پشت سر بگذاریم. بنابراین ، اول ، ما میزان سرمایه گذاری را در متغیر "سرمایه گذاری_ ولت" ذخیره می کنیم. پس از آن ، ما تعداد سهام Google را که می توانیم با استفاده از مبلغ سرمایه گذاری خریداری کنیم ، محاسبه می کنیم. می توانید توجه داشته باشید که من از عملکرد "کف" ارائه شده توسط بسته ریاضی استفاده کرده ام ، زیرا ، ضمن تقسیم مبلغ سرمایه گذاری با قیمت بسته شدن سهام Google ، خروجی را با اعداد اعشاری از بین می برد. تعداد سهام باید یک عدد صحیح باشد اما تعداد اعشاری نیست. با استفاده از عملکرد "کف" ، می توانیم اعشار را قطع کنیم. به یاد داشته باشید که عملکرد "کف" پیچیده تر از عملکرد "دور" است. سپس ، ما برای یافتن بازده سرمایه گذاری و به دنبال آن برخی از وظایف دستکاری داده ها ، یک حلقه را می گذرانیم.

سرانجام ، ما در حال چاپ کل بازدهی هستیم که با سرمایه گذاری صد هزار نفر در استراتژی تجارت خود دریافت کردیم و مشخص می شود که ما در یک سال سود تقریبی پنجاه و پنج هزار و پانصد دلار کسب کرده ایم. این بد نیست! حال ، بیایید بازده خود را با SPY ETF (ETF طراحی شده برای ردیابی شاخص بازار سهام S& P 500) مقایسه کنیم.

مرحله 9: مقایسه ETF جاسوسی

این مرحله اختیاری است اما بسیار توصیه می شود زیرا می توانیم ایده ای از عملکرد استراتژی تجارت ما در برابر معیار (جاسوسی ETF) بدست آوریم. در این مرحله ، ما قصد داریم داده های SPY ETF را با استفاده از عملکرد "get_historical_data" که ایجاد کردیم استخراج کنیم و بازده هایی را که از جاسوسی ETF دریافت می کنیم با استراتژی MACD خود در Google مقایسه کنیم.

اجرای پایتون:

خروجی:

توضیح کد: کد مورد استفاده در این مرحله تقریباً شبیه به موردی است که در مرحله قبلی پس زمینه استفاده می شود ، اما به جای سرمایه گذاری در Google ، ما با اجرای هیچگونه استراتژی تجاری در ETF جاسوسی سرمایه گذاری می کنیم. از خروجی ، می توانیم ببینیم که استراتژی معاملات MACD ما 27 ٪ از ETF جاسوسی بهتر شده است. عالیه!

افکار نهایی!

MACD یکی از قدرتمندترین استراتژی های موجود در آنجا است و می تواند در هنگام استفاده از بازار واقعی بسیار کارآمد باشد. اگر تصمیم دارید از MACD در بازار دنیای واقعی استفاده کنید ، یک نکته مهم برای به خاطر سپردن وجود دارد. MACD تمایل به آشکار کردن سیگنال های معاملاتی کاذب دارد. بنابراین ، بسیار توصیه می شود علاوه بر MACD از یک شاخص فنی نیز استفاده کنید تا بررسی کنید که آیا سیگنال ارائه شده در واقع یک سیگنال تجاری معتبر است یا خیر. ما با استفاده از چندین شاخص برای ساختن یک استراتژی MACD را پوشش نداده ایم زیرا تنها هدف مقاله این است که فقط بفهمیم MACD چیست و چگونه می توان با استفاده از پایتون پیاده سازی کرد.

همچنین می توانید توجه داشته باشید که سهام مورد استفاده ما برای اجرای استراتژی تجارت MACD ما به طور تصادفی انتخاب شده است که یک رویکرد عالی نیست. راه های مقابله با انتخاب سهام می تواند با یک رویکرد کمی یا یک رویکرد مبتنی بر الگوریتم ML انجام شود. این می تواند نتایج ما را به میزان قابل توجهی بهبود بخشد. خودشه! امیدوارم که از این مقاله چیز مفیدی یاد گرفته باشید. و اگر فراموش کردید که برخی از قطعات کدگذاری را دنبال کنید ، نگران نباشید! من منبع کامل را در پایان مقاله ارائه داده ام.

آموزش فارکس برای مبتدی ها...
ما را در سایت آموزش فارکس برای مبتدی ها دنبال می کنید

برچسب : نویسنده : Mihayloo بازدید : <-PostHit-> تاريخ : پنجشنبه 27 بهمن 1401 ساعت: 20:07