با استفاده از رگرسیون لجستیک برای پیش بینی جهت بازار در تجارت الگوریتمی

ساخت وبلاگ

[Box Type = "Note" Align = "" Width = ""] این مقاله گزیده ای از کتاب دکتر Param Jeet و Prashant Vats با عنوان یادگیری مالی کمی با r است. این کتاب به شما کمک می کند تا در مورد تکنیک های مختلف تجارت الگوریتمی و راه های بهینه سازی آنها با استفاده از ابزارهای موجود در R. [/جعبه] مطلع شوید.

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

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

>library("quantmod")>getSymbols("^DJI",src="https://hub.packtpub.com/using-logistic-regression-predict-market-direction-algorithmic-trading/yahoo")>DJI

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

>AVG10AVG20STD10STD20RSI5RSI14MACD12269MACD7205BBANDS

دستورات زیر ایجاد جهت متغیر با جهت بالا (1) یا جهت پایین (0) است. جهت بالایی ایجاد می شود که قیمت فعلی از 20 روز قبل قیمت بیشتر باشد و جهت پایین تر ایجاد شود که قیمت فعلی کمتر از 20 روز قیمت قبل باشد:

>directiondirection[dji>LAG (DJI ، 20)] Direction [DJI

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

بعد شیء DJI را می توان با استفاده از DIM () محاسبه کرد. من از DIM () بیش از DJI استفاده کردم و خروجی را در DM () ذخیره کردم. DM () دارای دو مقدار ذخیره شده است: مقدار اول تعداد ردیف ها و مقدار دوم تعداد ستون های DJI است. نام ستون ها را می توان با استفاده از colnames () استخراج کرد. از دستور سوم برای استخراج نام برای آخرین ستون استفاده می شود. بعد نام ستون را با یک نام خاص جایگزین کردم ، جهت:

>dmdm [1] 2493 16>colnames(dji)[dm[2]] [1] "..11">Colnames (DJI) [DM [2]] Colnames (DJI) [DM [2]] [1] "Direction"

ما داده های شاخص داو جونز (DJI) را در فضای کاری R استخراج کرده ایم. حال برای اجرای رگرسیون لجستیک باید داده ها را به دو قسمت تقسیم کنیم. بخش اول داده های درون نمونه و بخش دوم داده های خارج از نمونه است.

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

>issdisedossdosed

دو دستور زیر برای بدست آوردن شماره ردیف برای تاریخ ها هستند، یعنی متغیر isrow اعداد ردیف را برای محدوده تاریخ درون نمونه استخراج می کند و osrow شماره ردیف ها را برای محدوده تاریخ خارج از نمونه استخراج می کند:

>isrow= issd& index(dji) osrow= ossd& index(dji)

متغیرهای isdji و osdji به ترتیب مجموعه داده های درون نمونه و بیرون نمونه هستند:

>isdjiosdji

اگر به داده های درون نمونه، یعنی isdji نگاه کنید، متوجه می شوید که مقیاس بندی هر ستون متفاوت است: چند ستون در مقیاس 100، چند ستون دیگر در مقیاس 10000 و تعداد کمی هستند. بقیه در مقیاس 1 هستند. تفاوت در مقیاس بندی می تواند نتایج شما را با مشکل مواجه کند زیرا وزن های بالاتر به متغیرهای با مقیاس بالاتر تخصیص داده می شود. بنابراین قبل از حرکت به جلو، باید استانداردسازی مجموعه داده را در نظر بگیرید. من از فرمول زیر استفاده خواهم کرد:

داده های استاندارد =

میانگین و انحراف استاندارد هر ستون با استفاده از application() در اینجا قابل مشاهده است:

>ismeisstd

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

>isidn

از فرمول 6. 1 برای استانداردسازی داده ها استفاده کنید:

>norm_isdji

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

>dmnorm_isdji[, dm[2]]

اکنون تمام داده های مورد نیاز برای ساخت مدل را ایجاد کرده ایم. شما باید یک مدل رگرسیون لجستیک بسازید و به شما کمک می کند تا جهت بازار را بر اساس داده های درون نمونه پیش بینی کنید. ابتدا در این مرحله فرمولی ایجاد کردم که جهت به صورت وابسته و بقیه ستون ها به عنوان متغیر مستقل است. سپس من از یک مدل خطی تعمیم یافته استفاده کردم، یعنی glm() برای برازش مدلی که دارای فرمول، خانواده و مجموعه داده است:

>فرمول مدل

خلاصه ای از مدل را می توان با استفاده از دستور زیر مشاهده کرد:

>خلاصه (مدل)

بعد از ()predict برای جا دادن مقادیر روی همان مجموعه داده برای تخمین بهترین مقدار برازش شده استفاده کنید:

>پیش

پس از برازش مقادیر، باید سعی کنید با استفاده از دستور زیر آن را به احتمال تبدیل کنید. این خروجی را به شکل احتمالی تبدیل می کند و خروجی در محدوده [0, 1] خواهد بود:

>پروب

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

>par(mfrow=c(2,1))>plot(pred,type="l")>طرح (prob, type="l")

head() می تواند برای مشاهده چند مقدار اول متغیر استفاده شود:

>head(prob) 2010-01-042010-01-05 2010-01-06 2010-01-07 0. 8019197 0. 4610468 0. 7397603 0. 9821293

شکل زیر متغیر تعریف شده در بالا pred را نشان می دهد که یک عدد واقعی است و تبدیل آن بین 0 و 1 را نشان می دهد که نشان دهنده احتمال است، یعنی prob با استفاده از تبدیل قبلی:

Logistic Regression with R

شکل 6. 1: پیش بینی و توزیع احتمال DJI

As probabilities are in the range of (0,1) so is our vector prob . Now, to classify them as one of the two classes, I considered Up direction ( 1 ) when prob is greater than 0.5 and Down direction ( 0 ) when prob is less than 0.5 . This assignment can be done using the following commands. prob> 0.5 generate true for points where it is greater and pred_direction[prob>0. 5 ] 1 را به همه این نقاط اختصاص می دهد. به طور مشابه، عبارت بعدی تخصیص 0 را هنگامی که احتمال کمتر یا مساوی 0. 5 باشد نشان می دهد:

>pred_directionpred_direction[prob>0. 5] pred_direction[prob

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

>install.packages('caret')>library(caret)>matrixmatrix Confusion Matrix and Statistics Reference Prediction 0 1 0 362 35 1 42 819 Accuracy : 0.9388 95% CI : (0.9241, 0.9514) No Information Rate : 0.6789 P-Value [Acc>NIR]:

جدول قبل نشان می دهد که ما 94٪ پیش بینی صحیح داریم، زیرا 362 + 819 = 1181 پیش بینی های صحیح از 1258 هستند (مجموع هر چهار مقدار). پیش بینی بالای 80 درصد نسبت به داده های درون نمونه معمولاً پیش بینی خوبی فرض می شود. با این حال، 80٪ ثابت نیست، باید این مقدار را بر اساس مجموعه داده و صنعت رقم زد. اکنون شما مدل رگرسیون لجستیک را که 94 درصد را به درستی پیش بینی کرده است، پیاده سازی کرده اید و باید آن را برای قدرت تعمیم آزمایش کنید. باید این مدل را با استفاده از داده های خارج از نمونه آزمایش کرد و دقت آن را آزمایش کرد. اولین گام استانداردسازی داده های خارج از نمونه با استفاده از فرمول (6. 1) است. در اینجا میانگین و انحراف استاندارد باید همان مواردی باشد که برای عادی سازی درون نمونه استفاده می شود:

>osidorm_osdjinorm_osdji[, dm[2]]

در مرحله بعد از ()predict روی داده های خارج از نمونه استفاده می کنیم و از این مقدار برای محاسبه احتمال استفاده می کنیم:

>ospredosprob

پس از تعیین احتمالات برای داده های خارج از نمونه ، باید با استفاده از دستورات زیر آن را در کلاس های بالا یا پایین قرار دهید. ConfusionMatrix () در اینجا یک ماتریس برای داده های نمونه تولید می کند:

>ospred_directionospred_direction[osprob>0. 5] OSPRED_DIRECTION [OSProbosmatrixosmatrix ماتریس سردرگمی و پیش بینی مرجع آمار 0 1 0 115 26 1 12 99 دقت: 0. 8492 95 ٪ CI: (0. 7989 ، 0. 891)

این 85 ٪ دقت در داده های خارج از نمونه را نشان می دهد. یک مدل معاملاتی واقع بینانه همچنین هزینه معاملات و لغزش بازار را به خود اختصاص می دهد ، که باعث افزایش شانس برنده می شود.

ما تکنیک های پیشرفته ای را که در بازارهای سرمایه اجرا شده است ارائه دادیم و همچنین مدل رگرسیون لجستیک را با استفاده از رفتار باینری برای پیش بینی جهت بازار آموختیم.

اگر از این گزیده لذت بردید ، کتاب یادگیری مالی کمی را با R تا شیرجه عمیق به دنیای گسترده تجارت الگوریتمی و یادگیری ماشین بررسی کنید.

Leaing Quantitative Finance with R

  • برچسب ها
  • اخبار یادگیری ماشین
  • الگوریتم
  • ابزار و چارچوب
  • گزیده کتاب
  • آموزش
  • رگرسیون لجستیک با R
فارکس کاران ایران...
ما را در سایت فارکس کاران ایران دنبال می کنید

برچسب : نویسنده : ديناروند فهيمه بازدید : <-PostHit-> تاريخ : يکشنبه 11 تير 1402 ساعت: 13:59