یک رویکرد برنامه ای برای ترکیب قدرت تحلیل احساسات و معاملات الگوریتمی
منتشر شده در
برنامه نویسی سطح بالا
8 دقیقه مطالعه 1 روز پیش
معرفی
بسیاری از معامله گران algo ضررهای زیادی را از استراتژی های معاملاتی خود تجربه می کنند، اگرچه نتایج امیدوارکننده ای را در فرآیندهای بک تست نشان می دهند. این به این دلیل است که حرکات سهام توسط هیچ شاخص فنی هدایت نمی شود، بلکه تحت تأثیر احساسات و شهودات ترکیبی معامله گران در بازار دنیای واقعی است.
اینجا جایی است که تحلیل احساسات نقش حیاتی ایفا می کند. اندازه گیری و تجزیه و تحلیل احساسات سهام به درک چگونگی درک معامله گران و رسانه ها از عملکرد سهام و حرکت قیمت آنها کمک می کند. این عوامل بسیار مهم هستند و استفاده از چنین اطلاعاتی می تواند یک مزیت در بازار ایجاد کند.
در سال های گذشته، دستیابی به داده های احساسات سهام کار آسانی نبود، اما امروزه منابع متعددی مانند APIها فرآیند استخراج و تجزیه و تحلیل داده های احساسات را تا حد زیادی تسهیل کرده اند.
در این مقاله، ما از یکی از این API ها، که API داده های تاریخی EOD (EODHD) است، برای به دست آوردن داده های احساسی سهام استفاده خواهیم کرد، اما به جای استفاده از این داده ها برای اهداف تجزیه و تحلیل، یک استراتژی معاملاتی ایجاد خواهیم کرد. از آن و برای مشاهده عملکرد آن در دنیای عملی، استراتژی را پس آزمایش کنید.
پیاده سازی پایتون
بیایید با وارد کردن بسته های مورد نیاز در محیط پایتون خود شروع کنیم. ما در این مقاله از چهار بسته استفاده خواهیم کرد که پانداها برای کار با دیتافریم، درخواست برای فراخوانی API، ریاضی برای انجام توابع عددی پیشرفته و termcolor برای زیباسازی خروجی متن برنامه هستند. تمام بسته های لازم را با استفاده از کد زیر وارد کنید:
پانداها را به صورت PD وارد کنیددرخواست های وارداتواردات ریاضیاز واردات termcolor با رنگ cl
قبل از وارد کردن، مطمئن شوید که بسته ها را با استفاده از خط فرمان نصب کنید. اکنون که همه بسته های مورد نیاز را به محیط پایتون وارد کرده ایم، می توانیم به مرحله بعدی که برقراری تماس های API است، برویم.
برای استخراج داده های احساسات سهام، از EODHD Sentiment Data API و EODHD End-of-Day API برای داده های تاریخی سهام استفاده می کنیم. در این مقاله، ما از احساسات و داده های سهام تاریخی مایکروسافت برای انجام فرآیندهای بک آزمایی استفاده می کنیم. داده ها را می توان به راحتی با کمک API ها با استفاده از کد زیر استخراج کرد:
api_key = '6156f2d1c12e19. 46412053'msft_sentiment = درخواست ها. get (f'https: //eodhistoricaldata. com/api/tweets-sentiments؟ s = msft. us & از = 2022-01-01 & to = 2023-04-19 & api_token = ') . json ()MSFT_HIST = درخواست ها.
برای عملکرد صاف کد فوق ، کلید API خود را به نشانه API مخفی حساب EODHD خود تغییر دهید. اگر یک کلید API EODHD ندارید ، اولاً به وب سایت خود بروید ، سپس فرآیند ثبت نام را برای ایجاد یک حساب EODHD به پایان برسانید ، و در آخر ، به صفحه "تنظیمات" بروید که در آن می توانید کلید مخفی EODHD API خود را پیدا کنیدبشراین مهم است که اطمینان حاصل شود که این کلید مخفی API برای کسی آشکار نشده است. در اینجا نگاهی اجمالی به پاسخ هر نقطه پایانی API (سمت چپ: احساسات API ، سمت راست: API تاریخی):
پاسخ نقطه انتهایی API داده های تاریخی خود توضیحی است و شامل تمام مقادیر معمول است. از طرف دیگر ، پاسخ Sentiment Data API Endpoint اطلاعات جالبی دارد. سه ستون وجود دارد: تاریخ ، شمارش و نرمال. ستون های موجود در اینجا ، ستون شمارش و عادی هستند. ستون Count تعداد اخبار جمع آوری شده از منابع مختلف وب را با توجه به سهام در یک تاریخ خاص نشان می دهد و ستون عادی شده نشانگر نمرات احساسات محاسبه شده است که مطابق احساسات فعلی سهام مثبت و منفی می شوند.
برای اینکه ما بتوانیم با داده های استخراج شده به آرامی کار کنیم ، لازم است پاسخ های API را از قالب JSON به Pandas DataFrames تبدیل کنیم. این کار را می توان به راحتی با استفاده از کد زیر انجام داد:
sentiment_df = pd. dataframe (msft_sentiment ['msft. us']) [::-1]hist_df = pd. dataframe (msft_hist)msft = sentiment_df. merge (hist_df)msft = msft. set_index ("تاریخ")msft. index = pd. to_datetime (msft. index)msft. tail ()در اینجا ، ما ابتدا پاسخ های API را به داده های پاندا اختصاص می دهیم. سپس ، ما از تابع ادغام برای ترکیب دو dataframe به منظور تطبیق تاریخ DataFrames که قبل از ادغام ، با یکدیگر متفاوت است ، استفاده می کنیم. این آخرین Dataframe است:
اکنون زمان آن رسیده است که ما یک استراتژی معاملاتی را بسازیم و در مورد داده های استخراج شده که در بالا نشان داده شده است ، یک استراتژی تجارت و پشتی را بسازیم. استراتژی تجارت بسیار ساده خواهد بود. ما سهام را خریداری خواهیم کرد که نمره احساسات بیشتر از صفر باشد و وقتی نمره احساسات منفی یا کمتر از صفر باشد ، سهام را می فروشیم. منطق این استراتژی معاملاتی ورود به بازار است وقتی که سهام توسط رسانه ها و بازرگانان صعودی تلقی می شود و در صورت خلاف اوضاع از آن خارج می شود. کد زیر استراتژی معاملاتی را پیاده سازی کرده و نتایج معاملات را نشان می دهد:
in_position = نادرستسرمایه گذاری = 100000عدالت = سرمایه گذاریبرای من در محدوده (LEN (MSFT)):if msft['normalized'][i]>0 و in_position == false:no_of_shares = math. floor (سهام/msft. close [i])عدالت -= no_of_shares * msft. close [i]in_position = درست استچاپ (cl ('خرید:' ، رنگ = 'سبز' ، جاذبه = ['bold']) ، F 'سهام با $ on' خریداری می شود ")elif msft ['normalized'] [i]<0 and in_position == True:عدالت += no_of_shares * msft. close [i]in_position = نادرستچاپ (cl ('فروش:' ، رنگ = 'قرمز' ، attrs = ['bold']) ، F 'سهام با $ on' خریداری می شود ")اگر in_position == true:عدالت += no_of_shares * msft. close [i]چاپ (cl (f ' ncclosing موقعیت در "، attrs = [' bold '])in_position = نادرستدرآمد = دور (سهام - سرمایه گذاری ، 2)ROI = دور (درآمد / سرمایه گذاری * 100 ، 2)چاپ (cl (f'eaing: $ ؛ roi: ٪ '، attrs = [' bold ']))این کد به شدت از کد پشتی که توسط یونگ هونگ تان در مقاله خود در مورد شاخص Supertrend نوشته شده است ، الهام گرفته است. فریاد او برای این کد شگفت انگیز. نتایج پشتی بسیار جالب است و این معاملات انجام شده توسط برنامه است:
در طول بازه زمانی پشتی ، معاملات زیادی توسط این برنامه انجام می شود. اما ، درآمد نهایی و ROI منفی است به این معنی که ما از استراتژی تجارت خود ضرر کرده ایم. این نشان می دهد که زمان آن رسیده است که ما استراتژی را دوباره مهندسی کنیم.
دلیل اصلی تحمل ضرر و زیان استراتژی تجارت ، تعداد معاملات دروغین ایجاد شده توسط آن است. یکی از روشهای مؤثر در حاوی سیگنال های کاذب ، معرفی یک ویژگی فنی دیگر مانند یک شاخص فنی به استراتژی تجارت است. در اینجا ، ما با یکی از مشهورترین شاخص های فنی ، شاخص قدرت نسبی خواهیم رفت. ما با یک نشانگر حرکت می رویم زیرا انواع دیگر شاخص ها تمایل به عقب ماندن در طبیعت دارند که در مورد ما ممکن است بر نتایج نهایی تأثیر بگذارد.
اکنون که تصمیم گرفتیم یک شاخص فنی اضافه کنیم ، زمان آن رسیده است که روی استراتژی تجارت موجود خود کار کنیم. استراتژی قبلی بسیار ساده است که کاملاً خوب است ، اما از آنجا که ما یک شاخص فنی دیگری در اختیار ما داریم ، می توانیم این استراتژی را کمی پیچیده تر کنیم.
در اینجا استراتژی نهایی است: ما سهام را خریداری خواهیم کرد که نمره احساسات منفی باشد و RSI کمتر از 40 باشد و وقتی نمره احساسات مثبت باشد و RSI بیشتر از 60 باشد ، سهام را می فروشیم. بازار هنگامی که سهام با قیمت بسیار پایین در دسترس است و در هنگام گران بودن از بازار خارج می شود. در اینجا کد پشتی برای اجرای استراتژی جدید تجارت ما وجود دارد:
msft_rsi = درخواست ها. get (f'https: //eodhistoricaldata. com/api/technical/msft. us؟ fmt = json & از = 2022-01-01 & to = 2023-04-19 & function = rsi & perio = 14 & api_token = ') . json ()rsi_df = pd. dataframe (msft_rsi)rsi_df ['date'] = pd. to_datetime (rsi_df. date)msft = msft. reset_index ()msft = msft. merge (RSI_DF)msft = msft. set_index ("تاریخ")in_position = نادرستسرمایه گذاری = 100000عدالت = سرمایه گذاریبرای من در محدوده (LEN (MSFT)):اگر msft ['نرمال شده'] [i]<0 and msft['rsi'][i] <40 and in_position == False:no_of_shares = math. floor (سهام/msft. close [i])عدالت -= no_of_shares * msft. close [i]in_position = درست استچاپ (cl ('خرید:' ، رنگ = 'سبز' ، جاذبه = ['bold']) ، F 'سهام با $ on' خریداری می شود ")elif msft['normalized'][i]> 0 and msft['rsi'][i]>60 و in_position == true:عدالت += no_of_shares * msft. close [i]in_position = نادرستچاپ (cl ('فروش:' ، رنگ = 'قرمز' ، attrs = ['bold']) ، F 'سهام با $ on' خریداری می شود ")اگر in_position == true:عدالت += no_of_shares * msft. close [i]چاپ (cl (f ' ncclosing موقعیت در "، attrs = [' bold '])in_position = نادرستدرآمد = دور (سهام - سرمایه گذاری ، 2)ROI = دور (درآمد / سرمایه گذاری * 100 ، 2)چاپ (cl (f ' neaing: $ ؛ roi: ٪' ، attrs = ['bold']))در ابتدا ، ما در حال استخراج RSI سهام مایکروسافت با یک دوره برگشت 14 روزه هستیم که بعداً با DataFrame واقعی که از نمرات احساسات و داده های تاریخی تشکیل شده است ، ترکیب می شود. پس از آن ، کد پشتی تقریباً مشابه با آنچه که قبلاً از آن استفاده کردیم به جز برخی از تغییرات برای اصلاح استراتژی تجارت است. در اینجا معاملات تولید شده و نتایج پشتیبان استراتژی جدید وجود دارد:
با مشاهده نتایج ، بدیهی است که ما تعداد معاملات دروغین را به طور قابل توجهی کاهش داده ایم و موفق شده ایم سود را از استراتژی تجارت بدست آوریم. بنابراین به راحتی می توان نتیجه گرفت که استراتژی ما ممکن است شانس خوبی برای عملکرد خوب در بازار داشته باشد.
یادداشت های بسته شدن
ما موفق به ساختن یک استراتژی تجاری سودآور شدیم اما این پایان است؟قطعا نه. در چندین جنبه برنامه ، زمینه توسعه زیادی وجود دارد. سایر شاخص های فنی را می توان برای دیدن نتایج احتمالی آزمایش کرد. پشتوانه استراتژی در مورد سهام متعدد از بخش های مختلف می تواند در تعیین بهترین سهام برای اجرای استراتژی معاملاتی به آن کمک کند.
مانند اینها ، پیشرفت های مختلف دیگری نیز وجود دارد که می توانند ذکر شوند. بنابراین ، این مقاله فقط نگاهی به پتانسیل و توانایی ترکیب دو نیرو از تجزیه و تحلیل احساسات و تجارت ALGO است و هنوز هم منطقه ای وسیعی برای کشف وجود دارد.
با این گفته ، شما به پایان مقاله رسیده اید. فریاد به داده های تاریخی EOD برای ارائه چنین داده های جالب و فوق العاده مفید. اگر پرس و جو یا پیشنهادی برای بهبود دارید ، در نظرات به من اطلاع دهید.< Pan> یادداشت های بسته شدن
استراتژی برای تجارت گزینه های...
ما را در سایت استراتژی برای تجارت گزینه های دنبال می کنید
برچسب :
نویسنده : فریبا کامران
بازدید : 32
تاريخ : پنجشنبه
26 مرداد
1402 ساعت: 14:44