شاخص بازار شامل فهرستی از قیمت سهام شرکت های بزرگ است. باید بین قیمت آنها همبستگی وجود داشته باشد. در اینجا میخواهم از مدل یادگیری ماشین (LSTM) برای پیشبینی شاخص بازار با دادههای تاریخی برخی سهام استفاده کنم.
جمع آوری داده ها
من از بسته پایتون yfinance برای دریافت قیمت سهام روزانه استفاده می کنم. من ارقام 3 ساله شامل "Open"، "Close"، "High"، "Low" و "Volume" را دانلود کردم.
پیش پردازش داده ها
متغیر هدف پیش بینی، نرخ بازده قیمت بسته ETL Index Index ETL در روز بعد است که به صورت تعریف می شود.
از آنجایی که ارزش حجم سهام خیلی زیاد است، آن را به صورت زیر تبدیل کردم:
p. s. اضافه کردن 1+ برای جلوگیری از ورود صفر.
مهندسی ویژگی
از آنجایی که فرض بر این است که قیمت شاخص ETL به قیمت سهام تاریخی بستگی دارد، برای ساخت ویژگیها از ارقام «باز»، «بستن»، «بالا»، «کم» و «حجم» استفاده کردم.
- برای هر ستون در ["باز"، "بستن"، "بالا"، "کم"، "حجم"]، تأخیر 5 روزه را محاسبه کردم که رقم i-روز قبلی است (i بین 1-5 است.).
- محاسبه تاخیر-i-return توسط:
3. تبدیل PCA را برای تمام مقادیر تاخیری در ["باز"، "بستن"، "بالا"، "کم"، "حجم"]، کاملاً 5*5 ویژگیها ایجاد کنید.
4. از 3 جزء اول PCA به عنوان ویژگی های نهایی استفاده کنید زیرا 3 جزء اول بیش از 80 درصد واریانس کل را توضیح داده اند.
آموزش مدل
من 3 ویژگی PCA و متغیر هدف را در مدل LSTM که یک شبکه عصبی بازگشتی رایج برای سری های زمانی است، تغذیه می کنم. ما دادههای 3 ساله را دانلود کردیم و از حدود 80 درصد برای آموزش مدل و 20 درصد دادههای دیده نشده برای آزمایش مدل استفاده کردیم. PyTorch-Lightning بسته ML است که ما برای کدنویسی مدل LSTM استفاده کردیم. می توانید کد را در Git من و همچنین دفترچه یادداشت پیدا کنید.
تنظیم فراپارامتر
من از بسته Ray Tune برای تنظیم هایپر پارامتری مدل pytorch استفاده کردم. هایپر پارامترها شامل:
- طول توالی سری زمانی
- نهاز حالت های پنهان در لایه LSTM
- اندازه دسته برای آموزش مدل
- نرخ ترک تحصیل برای خروجی LSTM
- نرخ یادگیری (lr) برای آموزش مدل
- نهلایه های LSTM
سنجش عملکرد
اگرچه مقدار پیشبینیشده مدل، نرخ بازده آتی شاخص بازار است و تابع زیان MSE است، اما ما فقط بر روی دقت برای ارزیابی عملکرد تمرکز میکنیم.
به این دلیل است که در شرایط واقعی تجارت ، فقط مربوط به سود یا از دست دادن است. اگر پیش بینی شود که در حال افزایش است و در واقع افزایش می یابد ، تجارت سود کسب کرده است. اگر پیش بینی شود که کاهش یابد و در واقع کاهش یابد ، ما هنوز هم می توانیم با خرید ETF معکوس سود کسب کنیم.
با این حال ، برای MSE ، اختلاف +0. 1 ٪ و-0. 1 ٪ بسیار اندک است ، اما در واقع یک ضرر مالی برای تجارت است. اگر جهت (ظهور/افت) به درستی پیش بینی شود ، بگویید مقدار پیش بینی شده +0. 3 ٪ است ، اما افزایش واقعی فقط +0. 1 ٪ است ، تفاوت همان مورد قبلی (0. 2 ٪) است ، اما تجارت استهنوز یک سود
سهام انتخاب شده برای آموزش و آزمایش
از آنجا که منابع محاسباتی محدود دارم ، فقط 10 سهام را برای پیش بینی شاخص بازار انتخاب کردم. برای هر یک از 10 سهام ، من با شاخص بازار به قیمت تاریخی پیوستم و سپس آموزش مدل ، آزمایش و تنظیم بیش از حد پارامتر را اجرا کردم.
من بازار HK (HSI) و بازار ایالات متحده (NASDX) را مقایسه کردم.
برای HSI ، سهام انتخاب شده عبارتند از:
برای بازار ایالات متحده ، سهام منتخب عبارتند از:
"fb" ، "aapl" ، "amzn" ، "goog" ، "nflx" ، "sq" ، "mtch" ، "ayx" ، "roku" ، "ttd"
این نتیجه نهایی است.
- با استفاده از Mei Tuan (3690) برای پیش بینی HSI می تواند به بالاترین دقت 58 ٪ برسد. Tencent (700) و پینگ AN (2318) همچنین می توانند به دقت بالایی برسند~56 ٪
- برای بازار ایالات متحده ، استفاده از فیس بوک (FB) و Netflix (NFLX) می توانند به بالاترین دقت دست یابند~به ترتیب 61 ٪ و 58 ٪.
- در اینجا نمودار داده های آزمایش HSI (خط زرد) و مقدار پیش بینی شده (خط قرمز) با استفاده از داده های Mei Tuan (3960) آورده شده است.
استراتژی تجارت
یک استراتژی تجارت بسیار ساده می تواند مانند این باشد:
- برای هر یک از 10 سهام انتخاب شده ، نرخ آینده پیش بینی شده بازده شاخص بازار را محاسبه کنید.
- Short listed the result for stock with accuracy >50 ٪
- با محاسبه میانگین وزنی نرخ بازده پیش بینی شده با استفاده از داده های سهام-I بر روی وزن دقت پیش بینی سهام ، مقدار مورد انتظار نرخ بازده آینده را محاسبه کنید.
4. If the expected return >آستانه از پیش تعریف شده (به عنوان مثال 0. 03 ٪ از هزینه معاملات) ، ما شاخص ETF را با استفاده از سود/متوقف کردن از دست می دهیم (به عنوان مثال 0. 5 ٪).
5- اگر بازده مورد انتظار منفی باشد ، ما هنوز هم می توانیم با ETF معکوس همین کار را انجام دهیم
6. هر روز با آخرین داده های روزانه همان استراتژی را تکرار کنید.
7. (اختیاری) هر روز تمام موقعیت را در پایان بازار ببندید.
سود/ضرر
برای سادگی ، من از ETF (7200. hk) به عنوان نرخ هدف بازده استفاده می کنم ، و همچنین فقط با این استراتژی تجارت ساده:
اگر نرخ بازده پیش بینی شده (p [i] [0]) پستی باشد ، ما شاخص ETF را در بازار باز می کنیم و سپس آن را در پایان بازار همان روز می فروشیم و بازده حكم را می گیریم (y [من] [0]) به عنوان p/l.
کد فوق برای محاسبه روزانه P/L (دلتا) است. فرض بر این است که دستور اجرا شده با قیمت محدودیت سود و حد مجاز 3 ٪ محدود شده است. سرانجام میانگین روزانه (بال/کل) را برمی گرداند.