آغاز یک ربات معاملات عمیق یادگیری - قسمت 1: 95 ٪ دقت کافی نیست

  • 2022-03-27

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

o k ، دوستان من ، هدف این است که یک سیستم معاملاتی پیچیده ای را توسعه دهیم که بتواند به طور مداوم از بازار بهتر عمل کند. در پایان ، ما یک برنامه آماده تولید خواهیم داشت و من حدود 20،000 دلار از پس انداز خودم سرمایه گذاری می کنم و نتایج را با شما به اشتراک می گذارم. از این رو ، در این سری از مقالات ، من فقط اثبات مفاهیم را به اشتراک نمی گذارم بلکه آنچه در واقع برای توسعه سیستم های هوش مصنوعی لازم است که می تواند عدم اطمینان از بازار واقعی را برطرف کند.

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

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

فرض

  1. بازار کاملاً کامل نیست. به این معنی که اطلاعات بلافاصله برای همه شرکت کنندگان در بازار در دسترس نیست ، اما برای گسترش زمان می برد.
  2. رویدادهای تاریخی بازار و حرکات سهام بر حرکات سهام آینده تأثیر می گذارد.
  3. بازار بیشتر رفتار منطقی افراد را دنبال می کند.

و لطفاً ، سلب مسئولیت را در پایین بخوانید.

ساختار آینده

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

  1. در این مقاله ، من اولین آزمایشات خود را با استفاده از قیمت سهام/بازده و حجم برای پیش بینی حرکات سهام آینده به اشتراک می گذارم.
  2. در مقاله بعدی ، من آزمایش های مختلفی را با استفاده از اخبار مالی و بازار برای تکمیل قیمت سهام تاریخی به اشتراک می گذارم تا پیش بینی های قوی تری از قیمت و بازده سهام آینده انجام شود.
  3. ترکیب تمام نتایج آزمایش و توسعه یک مدل درجه تولید که شامل قیمت سهام ، حجم ، اخبار و سایر نقاط داده برای پیش بینی بازده سهام است.
  4. ساخت یک ربات تقویت کننده عمیق برای اجرای تجارت. ما رباتی را آموزش خواهیم داد که یاد می‌گیرد بر اساس قیمت‌های تاریخی و پیش‌بینی حرکت سهام ما چه زمانی سهام مختلف را بفروشد و بخرد.
  5. میزبانی و استقرار ربات معاملاتی در یک سرویس ابری.
  6. وصل کردن ربات معاملاتی به یک حساب معاملاتی کاغذی، به عنوان آخرین تمرین.
  7. سرمایه گذاری 20000 دلار و اجازه دادن به ربات در تعامل آزادانه با بازار.

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

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

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

IBM سابقه قیمت نسبتا طولانی در یاهو دارد، قیمت ها به سال 1962 می رسد. ساده ترین راه برای به دست آوردن قیمت های تاریخی IBM این است که به سادگی مجموعه داده ها را از صفحه IBM yahoo دانلود کنید. یاهو برای هر روز معاملاتی، قیمت های باز، بالا، پایین، بسته و حجم (OHLCV) را ارائه می دهد. پس از دانلود و بارگذاری آن در یک نوت بوک، داده های IBM OHLCV به شکل زیر به نظر می رسد.

برای دریافت ایده از نحوه تغییر قیمت ها در طول زمان، قیمت های بسته شدن روزانه را ترسیم می کنیم. تاریخ شروع نمودار قیمت IBM 2 ژانویه 1962 است، در 3 فوریه 2020 به پایان می رسد و محدوده قیمتی بین 7. 5 تا 225 دلار دارد.

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

پیش پردازش داده های ما - می دانم که خسته کننده است اما ضروری است 😊

تغذیه با قیمت خام و داده های حجم در یک مدل یادگیری عمیق معمولاً ایده بدی است. هنگام نگاه به نمودار قیمت IBM می توانید قیمت ها را از سال 1962 تا 1991 (7 تا 48 دلار) در سطح کاملاً متفاوت از قیمت های سال 2000 و 2020 (140- 220 دلار) در سطح کاملاً متفاوت قرار دهید. در اصل ، این دو محدوده قیمت ارتباط چندانی با یکدیگر ندارند. به این معنی که دامنه از سال 1962-1991 (قیمت متوسط 25 دلار) ارزش توضیحی کمی برای محدوده قیمت 2000-2020 (میانگین قیمت 130 دلار) دارد. برای اینکه نقاط قیمت گذشته را در همان سطح با نقاط قیمت زمان اخیر قرار دهیم و در نتیجه برای آموزش شبکه های عصبی خود مفیدتر باشیم ، باید چند مرحله از پیش پردازش را انجام دهیم. بیایید پیش پردازش را شروع کنیم ، من قول می دهم که سریع انجام شود.

در مرحله اول ، ما قصد داریم قیمت ها و حجم ها را به تغییرات بازده/درصد تغییر دهیم. ساده ترین راه برای انجام این کار با استفاده از عملکرد PANDAS PCT_CHANGE () است.

مزیت داشتن بازده قیمت این است که آنها نسبت به داده های قیمت خام ثابت هستند. یک توضیح ساده در مورد ثابت بودن: Standarity = خوب ، زیرا داده های گذشته بیشتر به داده های آینده شبیه است و پیش بینی ها را آسان تر می کند.

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

ثانیا ، یک عادی سازی حداقل حداکثر برای کلیه داده های قیمت و حجم اعمال می شود ، و داده های ما از 0 تا 1 است. به جای استفاده از بازده قیمت خام و تغییرات حجم ، داده های عادی این مزیت را دارند که به یک مدل یادگیری عمیق اجازه می دهد تا سریعتر و پایدارتر تمرین کند.

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

با محاسبه بازده سهام ، عادی سازی و تقسیم داده ها به 3 بخش ، مجموعه داده ها اکنون شکل مصور را در زیر دارند.

آموزش و آزمایش معماری های مدل مختلف

پس از تهیه مجموعه داده ، اکنون می توانیم کارهای سرگرم کننده را شروع کنیم - آموزش مدلهای مختلف یادگیری عمیق. من با LSTM های دو طرفه ، ترانسفورماتورها و CNN + BI-LSTM آزمایش کرده ام. کد برای همه مدل ها را می توان در GitHub یافت.

دو طرفه LSTM (BI-LSTM)

LSTM دو طرفه پسوند یک LSTM سنتی (L Ong S Hort T Erm M Emory Cell) است که می تواند عملکرد مدل را هنگام پردازش مجموعه داده های متوالی بهبود بخشد. LSTM های دو طرفه دو لایه LSTM جداگانه را با هم ترکیب می کنند در حالی که لایه LSTM اول داده های متوالی (به عنوان مثال قیمت IBM) را به ترتیب زمانی صحیح دریافت می کند و لایه LSTM دوم فقط به ترتیب معکوس داده ها را دریافت می کند. پس از پردازش داده های ورودی توسط لایه LSTM دو طرفه (2 لایه LSTM) هر دو خروجی برای تولید پیش بینی نهایی در حال جمع آوری هستند. درک آن کمی ساده تر است ، من یک تصویر و کد در زیر اضافه کرده ام.

حال بیایید نگاهی بیندازیم که چگونه مدل LSTM دو طرفه هنگام کدگذاری به نظر می رسد. این مدل به جای اینکه فقط یک لایه BI-LSTM منفرد داشته باشید ، با سه لایه BI-LSTM برای بهبود ظرفیت مدل ساخته شده است.

حالا بیایید روند آموزش را شروع کنیم.

ارزیابی مدل

پس از آموزش برای 200 دوره ، نتایج زیر را بدست آوردیم. برای مجموعه اعتبار سنجی ، ما میانگین خطای میانگین درصد (MAPE) 3. 5828 داریم که می توان به خاطر سادگی ، به عنوان دقت 96. 42 ٪ تفسیر کرد. مجموعه داده های آزمون دارای مقدار MAPE 4. 2656 است که معادل دقت 95. 73 ٪ است. در ابتدا دقت بیش از 95 ٪ شگفت انگیز به نظر می رسد ، اما نمودار بعدی نشانگر یک داستان متفاوت است.

The blue line represents the daily price changes of the IBM stock (daily stock returns) and the yellow line corresponds with our model’s predictions. Despite having an average accuracy of >95 ٪ این مدل صرفاً موفق به یافتن مرکز توزیع بازده سهام شد. خط پیش بینی زرد به هیچ وجه از مرکز سهام در حدود 0. 6 باز می گردد.

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

CNN + دو طرفه LSTM

اکنون ما دقیقاً همان مراحل را با مدل BI-LSTM وانیل انجام خواهیم داد ، اما به جای استفاده از یک وانیل BI-LSTM ، BI-LSTM را با یک شبکه حلقوی (CNN) ترکیب خواهیم کرد.

معمولاً از CNN برای طبقه بندی تصویر استفاده می شود در حالی که هر لایه حلقوی درون CNN در حال استخراج ویژگی های مختلف از تصویر است. با این حال ، در سالهای اخیر نشان داده شده است که CNN ها هنگام تجزیه و تحلیل سری های زمانی و داده های پی در پی (به عنوان مثال صدا و متن) ارزش را ارائه می دهند. لایه های حلقوی در تشخیص الگوهای بین نقاط داده که از نظر مکانی نزدیک به یکدیگر هستند ، خوب هستند. در صورت تمایل به قیمت روز و داده های حجم شما که باید اینگونه باشد.

معماری لایه های معمولی از بلوک های آغازین گوگل الهام گرفته شده است. من پیچیدگی های دو بعدی مدل اولیه را به پیچیدگی 1 بعدی تغییر دادم و لایه ها را با سری های زمانی ما سازگار می کنم.

خوب، بیایید مدل CNN + Bi-LSTM را بسازیم.

و در نهایت شروع آموزش مدل CNN + Bi-LSTM.

ارزیابی مدل

پس از آموزش این مدل برای 200 دوره، نتایج آموزش به شرح زیر است. مقدار MAPE مجموعه اعتبارسنجی 3. 8454 فقط کمی بیشتر از 3. 5828 مدل قبلی است. مجموعه داده آزمایشی دارای مقدار MAPE 4. 5289 به جای 4. 2656 برای مدل Bi-LSTM است. برای هر دو، اعتبارسنجی و مجموعه آزمایشی شبکه CNN+Bi-LSTM بدتر از مدل وانیلی Bi-LSTM عمل می کند. اگرچه نتایج بدتری داریم، اما از اینکه می بینم این بار فقط یک خط پیش بینی مستقیم نداریم و بنابراین می توانیم هر گونه نقص شدید مدل یا ساختار داده را حذف کنیم، راضی هستم.🤓

این بار مدل ما یاد گرفته است که فقط روند تغییرات قیمت را دوباره پیش بینی کند. هنوز پیش‌بینی اقلام پرت تنها با داده‌های قیمت IBM امکان‌پذیر نیست.

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

مراحل بعدی - افکار نهایی

In conclusion, our models are able to identify the general trend of price changes, but outliers cannot be predicted. The Mean Average Percentage Error(MAPE) is always lower than 5, equating to an accuracy interpretation of >95 درصدبرای اولین آزمایش، نتایج در حال حاضر بسیار امیدوار کننده است. با این وجود، برای بهبود کاستی‌های مدل و تسلط بر پیش‌بینی دور از انتظار، چند گزینه داریم.

اول، می‌توانیم منابع داده‌ای اضافه کنیم که به پیش‌بینی موارد دور از دسترس کمک می‌کنند، مانند اخبار مالی و بازار.

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

جزئیات بیشتری برای بررسی وجود دارد. و من مطمئن هستم که بسیاری از سوالات و بخش های بی پاسخ وجود دارد. بنابراین، هر گونه نظر و پیشنهاد - لطفا به اشتراک بگذارید. خوشحال می شوم پیشنهاداتی را در روند آینده لحاظ کنم.

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

خیلی ممنون که تا آخر خواندید.

ژان

ویرایش شده در 1 ژوئن 2022:

در گذشته بازخوردها و درخواست‌هایی دریافت کرده‌ام تا مدل‌های پیش‌بینی دارایی‌های مالی خود را در دسترس و به راحتی قابل استفاده کنم. این به افراد کمک می کند تا به سوالاتی مانند:

چه دارایی های خوبی برای سرمایه گذاری وجود دارد؟چه چیزی را در سبد مالی خود قرار دهم؟

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.