ما آزمایش می کنیم تا ببینیم آیا فناوری به اندازه کافی قدرتمند است تا رمز و راز بازارهای مالی را حل کند
در صورت سرمایه گذاری صحیح و عاقلانه ، بازار سهام ایالات متحده می تواند بازده حیرت انگیز ایجاد کند. به دنبال مراحل شرکتهای سرمایه گذاری کمی مانند دو سیگما و ارگ ، ما علاقه مندیم بدانیم که آیا می توانیم از یادگیری ماشین برای پیش بینی حرکات قیمت سهام استفاده کنیم.
توجه داشته باشید از ویرایشگران Data Science: در حالی که ما به نویسندگان مستقل اجازه می دهیم مقالات را مطابق با قوانین و دستورالعمل های خود منتشر کنند ، ما سهم هر نویسنده را تأیید نمی کنیم. شما نباید بدون اینکه به دنبال مشاوره حرفه ای باشید ، به آثار نویسنده اعتماد کنید. برای جزئیات بیشتر به اصطلاحات خواننده ما مراجعه کنید.
داده
ما از Alpha Vantage API برای کشیدن داده های قیمت روزانه برای پنج ETF (QQQ ، TQQQ ، VTI ، IWM ، SPY) استفاده کردیم و فقط با باز ، بالا ، پایین ، نزدیک و حجم شروع به کار کردند.
نسل
ما تصمیم گرفتیم که به صورت دستی توابع را در پایتون ایجاد کنیم تا چندین شاخص فنی به شدت در تجارت محاسبه کنیم: Chaikin A/D ، Bband ، CCI ، EMA ، MACD ، OBV ، RSI ، SMA و STOCH.
میانگین حرکت ساده
میانگین های حرکت برای صاف کردن داده ها در یک آرایه برای کمک به از بین بردن نویز و شناسایی روندها استفاده می شود. میانگین متحرک ساده به معنای واقعی کلمه ساده ترین شکل یک میانگین متحرک است. هر مقدار خروجی میانگین مقادیر N قبلی است. در یک میانگین متحرک ساده ، هر مقدار در دوره زمانی دارای وزن برابر است و مقادیر خارج از دوره زمانی به طور متوسط گنجانده نمی شود. این امر باعث می شود که نسبت به تغییرات اخیر در داده ها پاسخگو باشد ، که می تواند برای فیلتر کردن این تغییرات مفید باشد.
میانگین متحرک نمایی
میانگین متحرک نمایی جزء اصلی تجزیه و تحلیل فنی است و در شاخص های فنی بی شماری استفاده می شود. در یک میانگین متحرک ساده ، هر مقدار در دوره زمانی دارای وزن برابر است و مقادیر خارج از دوره زمانی به طور متوسط گنجانده نمی شود. با این حال ، میانگین متحرک نمایی یک محاسبه تجمعی است ، از جمله تمام داده ها. مقادیر گذشته سهم کمتری در میانگین دارند ، در حالی که مقادیر اخیر سهم بیشتری دارند. این روش اجازه می دهد تا میانگین متحرک نسبت به تغییرات در داده ها پاسخگوتر باشد.
حرکت میانگین واگرایی همگرایی
میانگین واگرایی همگرایی متحرک (MACD) تفاوت بین دو میانگین متحرک نمایی است. خط سیگنال میانگین متحرک نمایی MACD است.
روند سیگنال MACD تغییر می کند و نشانگر شروع جهت روند جدید است. مقادیر بالا نشانگر شرایط بیش از حد ، مقادیر پایین شرایط فراوان را نشان می دهد. واگرایی با قیمت نشانگر پایان روند فعلی است ، به خصوص اگر MACD در مقادیر بسیار بالا یا پایین باشد. هنگامی که خط MACD از بالای خط سیگنال عبور می کند ، سیگنال خرید ایجاد می شود. هنگامی که MACD از زیر خط سیگنال عبور می کند ، سیگنال فروش ایجاد می شود. برای تأیید سیگنال ، MACD برای خرید باید بالاتر از صفر باشد و برای فروش زیر صفر باشد.
دوره زمانی برای MACD اغلب به عنوان 26 و 12 داده می شود. با این حال ، این عملکرد در واقع از ثابت های نمایی 0. 075 و 0. 15 استفاده می کند که نزدیک به دوره های 25. 6667 و 12. 3333 هستند. برای ایجاد یک شاخص مشابه با دوره های زمانی غیر از مواردی که در MACD ساخته شده است ، از عملکرد نوسان ساز قیمت استفاده کنید.
نوسان ساز تصادفی
اقدامات نوسان ساز تصادفی که در آن نزدیک در رابطه با محدوده معاملات اخیر است. مقادیر از صفر تا 100 است. ٪ D مقادیر بیش از 75 نشان دهنده یک وضعیت بیش از حد است. مقادیر زیر 25 نشانگر یک وضعیت بیش از حد است. هنگامی که ٪ D از بالای ٪ D عبور می کند ، یک سیگنال خرید است. وقتی از زیر عبور می کند ، یک سیگنال فروش است. RAW ٪ K به طور کلی برای استفاده از سیگنال های متقاطع بسیار نامنظم تلقی می شود.
خط تجمع/توزیع
خط تجمع/توزیع مشابه با حجم تعادل ON (OBV) است ، که بر اساس اینکه آیا نزدیک از نزدیک قبلی است ، زمان حجم +1/-1 را جمع می کند. با این حال ، شاخص تجمع/توزیع ، حجم را با مقدار محل نزدیک (CLV) ضرب می کند. CLV مبتنی بر حرکت مسئله در یک نوار واحد است و می تواند 1+ ، -1 یا صفر باشد.
خط تجمع/توزیع با جستجوی واگرایی در جهت شاخص نسبت به قیمت تفسیر می شود. اگر خط تجمع/توزیع به سمت بالا باشد ، نشان می دهد که قیمت ممکن است دنبال شود. همچنین ، اگر خط تجمع/توزیع مسطح شود در حالی که قیمت هنوز در حال افزایش است (یا در حال سقوط) است ، آن را نشان می دهد که مسطح قریب الوقوع قیمت را نشان می دهد.
گروههای بولینگر
گروههای بولینگر از سه خط تشکیل شده است. باند میانی یک میانگین متحرک ساده (به طور کلی 20 دوره) از قیمت معمولی (TP) است. باندهای فوقانی و تحتانی F انحراف استاندارد (به طور کلی 2) در بالا و زیر باند میانی هستند. در صورت نوسانات قیمت به ترتیب بالاتر یا پایین تر ، باند ها گسترده و باریک می شوند.
گروههای بولینگر به خودی خود سیگنال های خرید یا فروش را تولید نمی کنند. آنها شاخصی از شرایط بیش از حد یا بیش از حد هستند. هنگامی که قیمت نزدیک به باند بالا یا پایین است ، نشان می دهد که یک وارونگی ممکن است قریب الوقوع باشد. گروه میانی به سطح پشتیبانی یا مقاومت تبدیل می شود. گروههای فوقانی و تحتانی نیز می توانند به عنوان اهداف قیمت تعبیر شوند. هنگامی که قیمت از باند پایین خارج می شود و از باند میانی عبور می کند ، گروه فوقانی به هدف قیمت تبدیل می شود.
در حجم تعادل
حجم تعادل (obv) کل تجمعی از حجم بالا و پایین است. هنگامی که نزدیکتر از نزدیک قبلی باشد ، حجم به کل در حال اجرا اضافه می شود و وقتی نزدیک از نزدیک نزدیک باشد ، حجم از کل در حال اجرا کم می شود.
برای تفسیر obv ، به دنبال OBR باشید تا با قیمت یا پیش از حرکت قیمت حرکت کند. اگر قیمت قبل از obv حرکت کند ، این یک حرکت غیر تأیید شده است. مجموعه ای از قله های در حال افزایش ، یا فرورفتگی های در حال سقوط ، در OBV نشانگر یک روند قوی است. اگر Obv مسطح باشد ، بازار گرایش ندارد.
داده ها پس از تولید ویژگی
فرضیه ما
We initially wanted to build a single model using data from all ETFs (QQQ, TQQQ, SPY, VTI, IWM) to predict a long term price trend for stocks traded on an exchange. We set the label as 1 if the retu 20 trading days in the future >در غیر این صورت 3 ٪ و 0.
با این حال ، ما دریافتیم که بین هر ETF واریانس زیادی وجود دارد ، بنابراین تصمیم گرفتیم که برای هر ETF مدل های جداگانه ای بسازیم. ما فقط با استفاده از مجموعه داده QQQ ETF برای ساخت مدل خود به پایان رسیدیم.
Experiment 1 (20-day retu >3 ٪ به عنوان برچسب)
LSTM: آزمایش AUC 0. 476
شبکه عصبی MLP: آزمایش AUC 0. 577
جنگل تصادفی: آزمایش AUC 0. 917
خیلی خوب برای درست بودن - یک امید دروغین
بهترین مدل ما با استفاده از مجموعه داده QQQ به ما AUC 0. 917 داد. ما فکر کرده بودیم که راهی برای پیش بینی بازار سهام فهمیدیم. با این حال ، این مورد نبود زیرا ما یک نقص اساسی با مدل خود پیدا کردیم.
با کنوانسیون مشخص شده است که در یادگیری ماشین ، برای ایجاد مجموعه های آموزش و آزمایش خود باید مجموعه داده های خود را تغییر دهید. انجام این کار لازم است زیرا می خواهید داده های موجود در آزمون خود از همان توزیع داده های آموزش خود به دست بیایند. با این حال ، از آنجا که داده های سهام تاریخی وابسته به زمان است ، به این معنی که داده های روزهای بعدی تا زمان وقوع آن روزهای بعدی وجود ندارد ، تغییر داده های ما به این معنی است که مجموعه داده های آموزش به برخی از داده هایی که در واقع در آینده تعیین شده است ، دسترسی دارد. به عنوان مثال ، از نظر فرضی ، اگر بخواهیم مدل خود را در سال 2017 با استفاده از مجموعه داده های خود که دارای داده های سال 2018 است ، آموزش دهیم ، ما واقعاً نمی توانیم از این مجموعه داده آموزشی برای آموزش مدل خود استفاده کنیم زیرا ، در سال 2017 ، داده های 2018 هنوز وجود نداشته است. به همین دلیل ، ما نمی توانیم هنگام ایجاد مجموعه داده های آموزش و آزمایش ، داده های خود را تغییر دهیم.
برای مدل بعدی ما ، ما از سال 2010 تا 2016 به عنوان مجموعه آموزش و داده های خود از سال 2017 تا 2019 به عنوان مجموعه آزمون خود استفاده کردیم. این تقسیم توزیع نیز مفید است زیرا اساساً به ما این امکان را می دهد تا نحوه عملکرد مدل ما با داده های آینده را "شبیه سازی" کنیم.
متأسفانه با این مدل ، نمره AUC با همان طبقه بندی کننده جنگل تصادفی به طور قابل توجهی به 0. 44 کاهش یافت.
جنگل تصادفی: آزمایش AUC 0. 440
تجدید نظر در توزیع برچسب
As you can see in our sample dataset here, all of these rows have very similar 20-MAs, open, and closes. If 20 days after 1/4/2019 has a > 3% increase, then the days around 1/4/2019 will also have a >3 ٪ افزایش می یابد ، و این که برای هر سهام صادق است ، عامل تعیین کننده برچسب در 20 روز به طور کلی در روز 20 تصمیم نمی گیرد. در روزهایی که سوابق در 20 دوره معاملاتی آینده خود با هم تداخل دارند ، تعیین می شود. در این حالت ، اگر ما 1/6/2019 را بیرون بیاوریم و به عنوان آزمون تنظیم و آموزش در بقیه آن ، مدل مطمئناً داده های آزمون را برچسب یکی اختصاص می دهد زیرا تمام ویژگی های آن شبیه به تاریخ های اطراف استکه یک خوشه تشکیل می دهد. مسئله دیگر با این رویکرد این است که ، همانطور که قبلاً گفته شد ، این مدل به مجموعه آموزش اجازه می دهد تا از داده های آینده برای پیش بینی استفاده کند. به عنوان مثال ، مجموعه آموزش شامل 1/7/201 9-1/11/2019 ، برای پیش بینی 1/6/2019 ، که انجام آن در دنیای واقعی غیرممکن است.
و این مسئله هنگامی که ما در حال تغییر دادن مجموعه داده اصلی و هنگامی که از تاریخ های بعدی به عنوان مجموعه آزمایش استفاده نمی کنیم ، به یک مشکل تبدیل می شود. در این حالت ، قیمت های پایانی در مجموعه آموزش حدود 20 دلار در هر سهم معلق است ، اما از آنجا که ما از سال 2019 به عنوان مجموعه آزمایش استفاده می کنیم ، قیمت ها به طرز چشمگیری متفاوت است ، بنابراین ، این مدل در اختصاص دادن برچسب های صحیح به آنها عملکرد ضعیفی دارد. با توجه به ویژگی های سوابق ما دارای طیف وسیعی از مقادیر که در مجموعه آموزش وجود ندارد.
راه حلی که ما به دست آوردیم این بود که برچسب خود را به یک حرکت روزانه قیمت سهام تغییر دهیم. اگر قیمت بسته شدن روز بعد از قیمت بسته شدن روز جاری بیشتر باشد ، برچسب آن 1 است. در اینجا ، این که آیا قیمت سهام یک روز افزایش می یابد روز بعد مستقل از یکدیگر است ، که مشکل ما در تشکیل خوشه ها و نگاه کردن به داده های آینده را برطرف کرده است. بشر
آزمایش 2 (افزایش/کاهش قیمت روز بعد به عنوان برچسب)
1. TPOT
منابع:
TPOT یک بسته Python با منبع باز است و بسیاری از ترکیب های مختلف مهندسی ویژگی و انتخاب مدل را اجرا می کند. TPOT به طور خودکار خطوط لوله بسیاری را ایجاد می کند که شامل روش های مختلف مهندسی ویژگی (PCA ، Maxabsscaler ، MinmaxScaler و غیره) و همچنین مدل های مختلف با مخلوط های مختلف HyperParameters است.
عملکرد TPOT به شدت به تعداد خطوط لوله و زمانی که اجازه می دهید آن را اجرا کنید بستگی دارد. تعداد خطوط لوله برابر با جمعیت_ size + نسل x formpring_size است ، که می تواند در پارامترهای TPOT تعیین شود.
از آنجا که ما فقط اجازه می دهیم TPOT 150 خط لوله را اجرا کند ، که فقط کمتر از 15 دقیقه طول کشید ، عملکرد ایده آل نیست: آزمایش AUC 0. 509. با این حال ، با زمان کافی (ده ها ساعت یا حتی روز) ، TPOT می تواند ابزاری بسیار قدرتمند و آسان برای تولید نتایج عالی باشد.
علاوه بر این ، TPOT به طور خودکار بهترین خط لوله ای را که از طریق آن جستجو کرده است ذخیره می کند و به کاربران امکان می دهد این نتایج را به عنوان یک پرونده . py صادر کنند. همانطور که مشاهده می کنید ، در مورد ما ، TPOT PCA را بر روی داده های ما انجام داد و Gaussiab را به عنوان بهترین مدل طبقه بندی انتخاب کرد.
2. xgboost
با استفاده از یک xgbclassifer ، ما نیازی به پیکربندی چیزهای غیر از نرخ یادگیری ، حداکثر عمق ، n_estimators و نمونه نداشتیم. با استفاده از اعتبارسنجی متقاطع و یک معیار امتیاز دهی از AUC ، ما Hyperparameters را بهینه کردیم. سرانجام ، ما از HyperParameters بهینه شده برای ساخت یک مدل نهایی در X_Train و Y_Train استفاده کردیم. دقت (نه AUC) در مجموعه آزمون 50. 5 ٪ بود
فارکس پرشین...
ما را در سایت فارکس پرشین دنبال می کنید
برچسب :
نویسنده : احمدي مينا
بازدید : <-PostHit->
تاريخ : يکشنبه
28 اسفند
1401 ساعت: 13:42