تجارت الگوریتمی در آموزش R

ساخت وبلاگ

در این پست ، من نحوه استفاده از R را برای جمع آوری سهام ذکر شده در Loyal3 ، دریافت داده های تاریخی از یاهو و سپس انجام یک استراتژی تجارت الگوریتمی ساده نشان خواهم داد. در طول راه ، شما برخی از خراش های وب را یاد خواهید گرفت ، تابعی که به یک API مالی و یک HTMLWidget ضربه می زند تا یک نمودار سری زمانی تعاملی ایجاد کند.

برای این پست ، یک تجارت تجاری به عنوان مجموعه ای از قوانین تعریف می شود که باعث می شود یک رویداد خرید یا فروش به جای یک مدل پیش بینی کننده یا پیش بینی سری زمانی باشد. این ساده ترین نوع تجارت Algo است ، اما اگر شما علاقه مند به حفر عمیق تر به امور مالی با R هستید ، من شما را ترغیب می کنم که دوره DataCamp را در مدل سازی یک استراتژی تجاری کمی در R. طی کنید.

زمینه

در سال 2015 ، من سرمایه گذاری کمی در Loyal3 را شروع کردم. خدمات آنها غیرمعمول و مکانی عالی برای شروع سفر سرمایه گذاری شما است. به جای اینکه سرمایه گذار را برای معاملات شارژ کند ، Loyal3 شرکت ها را برای لیست روی پلتفرم خود متهم می کند. فرضیه این است که افرادی که خدمات یک شرکت را دوست دارند نیز سهام را خریداری می کنند و با این کار به طرفداران برند قوی تبدیل می شوند. ساخت پلت فرم قانع کننده تر این است که می توانید سهام کسری را خریداری کنید. بنابراین ، می توانید با قیمت 800 دلار آمازون فقط با 10 دلار وارد آن شوید و هر بار که در پایان ماه کمی پول اضافی دریافت کنید ، 10 دلار دیگر خریداری کنید. مطمئناً هزینه های اصطکاک وجود دارد زیرا شما باید در ویندوز تجارت کنید و کل نمونه کارها شما محدود است~70 سهام اما Loyal3 نشان دهنده یک روش سرگرم کننده و کم هزینه برای کشف آموزش سهام است. شما می توانید پوست واقعی را در بازی با قیمت 10 دلار قرار دهید!

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

algorithmic trading R

سهام موجود در www.loyal3.com

تنظیم فضای کاری خود

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

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

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

کتابخانه Dygraphs یک بسته بندی برای یک کتابخانه نمودار JavaScript با منبع باز و سریع است. این یکی از HTMLWIDGETS است که باعث می شود R به جای یک تصویر استاتیک ، پویاتر و بخشی از یک فایل HTML باشد. سرانجام ، از بسته Lubridate برای دستکاری آسان تاریخ استفاده می شود.

جمع آوری داده ها

همه سهام Loyal3 همه در یک صفحه واحد ذکر شده اند. قبل از اینکه بتوانید برای ساخت الگوریتم معاملاتی خود قیمت سهام روزانه را جستجو کنید ، باید تمام تیک های موجود در سهام موجود را جمع آوری کنید. اولین کاری که باید انجام شود اعلام سهام است. به عنوان یک رشته URL لیست کنید. بعد از read_html () استفاده کنید تا جلسه R شما یک جلسه اینترنتی ایجاد کند و تمام اطلاعات HTML را در صفحه به عنوان مجموعه گره XML جمع آوری کند. صفحه CSS دارای شناسه ای به نام ".company-Name" است. هنگام تماس با html_nodes () از این پارامتر استفاده کنید تا فقط داده های XML مرتبط با این گره را انتخاب کنید. سرانجام ، از html_text () استفاده کنید تا مقادیر متن واقعی برای نام شرکت جمع آوری شود.

برای بررسی سهام موجود در Loyal3 ، می توانید سهام را به صورت کنسول خود چاپ کنید. این نام شرکت را به عنوان یک بردار متن برمی گرداند.

برای تحقیق در مورد قیمت سهام ، ابتدا باید نماد تیک را دریافت کنید. هنگامی که در سایت Loyal3 هستید ، می توانید روی کاشی شرکت کلیک کنید تا صفحه ای را با نماد تیک و سایر اطلاعات شرکت بارگیری کنید.

پس از انجام برخی بازرسی های دستی ، دریافتم که پیوندهای 54 تا 123 در صفحه نمایانگر صفحات شرکت مورد نیاز برای برای خراش دادن اطلاعات تیک است. خط آخر از Paste0 () برای جمع آوری رشته URL Base 'http: // www.loyal3.com' به صفحات شرکت خاص ، مانند "/والمارت" استفاده می کند. به عنوان مثال ، http://www.loyal3.com/walmart:

در هر یک از صفحات شرکت توضیحی ، قیمت بسته شدن اخیر و تیک وجود دارد. تمام صفحات شرکت یکسان هستند بنابراین می توان از عملکرد سفارشی get. ticker () برای استخراج نماد تیک استفاده کرد.

در صفحه وب یک شرکت یک جدول به نام "قیمت تیک" وجود دارد. این تابع به یک صفحه شرکت حرکت می کند ، جدول مناسب را مشخص می کند ، متن را با html_text () استخراج می کند. سرانجام ، استفاده از sub () به همراه عبارت معمولی ^([[: alpha:]]*).* و \ 1 همه شخصیت های الفبایی را حفظ می کنند. نتیجه این است که شخصیت های خاص مانند $ و هر شخصیت عددی مانند قیمت بسته شدن حذف می شوند. همانطور که عملکرد هر یک از 70 صفحه را می خواند ، فقط تیکت سهام را جمع می کند.

loyal3 stock page for Alibaba

صفحه سهام Loyal3 برای Alibaba ، جایی که جدول حاوی جعبه سهام ، بابا را می بینید ، زیر متن پررنگ است

مسلح با عملکرد سفارشی خود ، از pblapply () استفاده کنید تا آن را در هر یک از سهام موجود باشد. لینک هایی که حاوی صفحه هر شرکت هستند. شیء حاصل ، Stock. Tickers ، لیستی از تیک های سهام شخصی با هر عنصر مربوط به یک شرکت جداگانه است.

یکی از راه های تغییر لیستی از عناصر به یک شیء مسطح با do. call () است. در اینجا ، شما از RBIND استفاده می کنید تا هر عنصر لیست را به یک بردار واحد متصل کنید. سرانجام ، شما یک قاب داده با نماد و اطلاعات نام شرکت ایجاد می کنید.

برای اینکه در تحلیل خود سازگار باشید ، ممکن است بخواهید میزان اطلاعات تاریخی را که در هر سهام جمع می کنید محدود کنید. عملکرد Sys. data () یک شیء تاریخ را به عنوان سال ، ماه و سپس روز ذخیره می کند. استفاده از سالها با یک عدد صحیح یکی از راه های تفریق زمان خاصی از Object. Date است.

برای به دست آوردن داده های مالی یاهو ، شیء تاریخ باید به اشیاء کاراکتر ساده و بدون دلهره تغییر یابد. با استفاده از عملکرد جایگزینی جهانی GSUB () در هر دو start. date و end. date کلاس را تغییر داده و همزمان خط ها را حذف می کند. در GSUB () ، برای جستجو در الگوی کاراکتر ، سپس شخصیت های جایگزینی را عبور دهید. در این حالت الگوی جایگزین یک شخصیت خالی بین نقل قول ها است. آخرین پارامتر شیئی است که GSUB () روی آن اعمال می شود.

عملکرد TTR () getyahoodata () نماد سهام و تاریخ شروع و پایان را می پذیرد. این تابع یک قاب داده را که دارای اطلاعات سری زمانی است ، برمی گرداند. هر ردیف یک تاریخ است و ستون ها حاوی اطلاعاتی مانند قیمت "باز" ، "بالا" ، "پایین" و "بسته شدن" برای یک سهام هستند. از آنجا که به دنبال شرکت های متعدد هستید ، می توانید از Lapply () یا Pblapply () استفاده کنید. در بردار نمادهای شرکت ، سپس عملکرد ، getyahoodata () و سپس اطلاعات تاریخ عبور کنید. تاریخ اشیاء پارامترهای بازیافت شده هر بار Getyahoodata () به نماد سهام اعمال می شود.

برای انتخاب لیست برگشتی ، Stocks. ts ، آسانتر برای حرکت می توانید نام را به عناصر لیست اضافه کنید. با استفاده از نام هایی با سهام. tts نام ها را به عنوان بردار اصلی $ $ اعلام می کنند.

هنگام کار با لیست های بزرگ ، دوست دارم شیء حاصل را بررسی کنم تا مطمئن شوم که نتیجه آن چیزی است که انتظار داشتم. اکنون که عناصر دارای نام هستند ، می توانید مستقیماً به آنها مراجعه کنید. در این مثال ، شما در حال بررسی 6 ردیف اول برای AMC Entertainment Holdings (AMC) هستید. استفاده از سر () در لیست ضمن مراجعه به $ AMC بخشی از سری زمانی را برای این سهام باز می گرداند:

بررسی داده های سهام

وقتی به مفسران اخبار مالی گوش می دهم اغلب به نمودارها مراجعه می کنند. با وجود تجارت فرکانس بالا و مدیریت فعال توسط دیگران ، بسیاری از سرمایه گذاران کوچک هنوز هم برای به دست آوردن بینش به نمودارها مراجعه می کنند. شیء سری زمانی را می توان به سرعت با استفاده از Plot نمایش داد. در لیست ارجاع به عنصر نامگذاری شده مانند $ AMC و سپس ستونی که می خواهید نمایش دهید ، در اینجا نزدیک است.

stocks plot

طرح قبلی استاتیک است و خیلی جالب نیست.

Let’s use a JavaScript library to make a chart you can explore. In this code snippet, you may observe the “%>٪ "یا اپراتور لوله. اپراتور لوله راه خوبی برای نوشتن کد مختصر است. این یک شیء را به عملکرد بعدی منتقل می کند بدون اینکه شما را مجبور به بازنویسی یک نام شی مانند شما در این پست کند.

In this example, you create a dygraph referring to the Twitter stock, $TWTR , and then the column you want to plot, $Close . Within dygraph, main adds a title that is specified in between the quotes. Using the “%>٪ "این کل شی به عملکرد بعدی dyrangeselector () ارسال می شود. می توانید یک محدوده تاریخ پیش فرض را با استفاده از C () با یک رشته شروع و پایان تاریخ مشخص کنید. هدف HTML حاصل یک سری زمانی پویا برای سهام توییتر با یک کشویی تاریخ در پایین است.

به یاد داشته باشید ، برای تغییر سهام نمایش داده شده ، نماد Ticker را در لیست Stocks. ts و سپس عنوان نمودار تغییر دهید.

basic dygraph for Twitter’s stock

این یک فاجعه اساسی برای سهام توییتر است

یک استراتژی تجارت ساده: روند زیر

معامله گران فرکانس بالا و صندوق های تامینی از مدل های پیشرفته و رویکردهای مبتنی بر قوانین برای اجرای معاملات استفاده می کنند. اگر می خواهید اطلاعات بیشتری کسب کنید ، پیشنهاد می کنم برای رویکردهای پیشرفته از www.quantopian.com بازدید کنید. برای رویکردهای ساده تر با این صفحه در www.investopedia.com شروع می شود.

در کد زیر ، یک استراتژی ساده معاملات حرکت را تجسم خواهید کرد. در اصل ، شما می خواهید میانگین حرکت 200 روز و 50 روزه را برای قیمت سهام محاسبه کنید. در هر روز معینی که میانگین حرکت 50 روز بالاتر از میانگین حرکت 200 روز باشد ، موقعیت خود را خریداری یا نگه می دارید. در روزهایی که میانگین 200 روز بیش از میانگین 50 روز در حال حرکت است ، شما سهام خود را می فروشید. این استراتژی یک روند زیر را دنبال می کند. ماهیت مثبت یا منفی بین دو میانگین مبتنی بر موقتی نشان دهنده حرکت سهام است.

بسته TTR SMA () را برای محاسبه میانگین حرکت ساده فراهم می کند. در این قطعه کد ، شما 6 ارزش اول را برای میانگین حرکت 200 و 50 روز توییتر بررسی می کنید. SMA () با عبور از داده های سری زمانی برای یک سهام و یک ستون خاص مانند Close کار می کند. این یک بردار واحد از قیمت های بسته برای سهام TWTR است. پارامتر دوم یک عدد صحیح است که تعداد مشاهدات برای میانگین متحرک را نشان می دهد. بدون استفاده از سر () عملکرد SMA () تمام مقادیر را برمی گرداند.

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

عملکرد سفارشی mov. avgs () یک قاب داده سهام واحد را برای محاسبه میانگین های متحرک می پذیرد. خط اول قیمت های پایانی را انتخاب می کند زیرا شاخص می شود [، 4] برای ایجاد سهام. close. در مرحله بعد ، این تابع از IFELSE برای بررسی تعداد ردیف های موجود در قاب داده استفاده می کند. به طور خاص اگر NROW در قاب داده کمتر از (2*260) باشد ، این عملکرد یک قاب داده برای میانگین حرکت با "NA" ایجاد می کند.

من این شماره را انتخاب کردم زیرا حدود 250 روز معاملاتی در سال وجود دارد ، بنابراین این بررسی می کند که سری زمانی حدود 2 سال یا بیشتر طول دارد. Loyal3 گاهی اوقات می تواند به IPO دسترسی پیدا کند و اگر سهام به تازگی عمومی باشد ، داده های کافی برای میانگین متحرک 200 روز وجود نخواهد داشت. با این حال ، اگر مقدار NROW از 2*260 بیشتر باشد ، این تابع یک قاب داده با داده های اصلی به همراه میانگین های حرکت 200 و 50 روزه به عنوان ستون های جدید ایجاد می کند. با استفاده از colnames ، نام ستون را اعلام می کنم. قسمت آخر این تابع از Complete. cases برای بررسی مقادیر در ستون متوسط حرکت 200 روز استفاده می کند. هر ردیف ای که ارزش نداشته باشد در نتیجه نهایی کاهش می یابد.

مسلح با این عملکرد MOV. AVGS () می توانید از PBLApply () استفاده کنید تا محاسبات متوسط متحرک را به هر یک از 70 فریم داده اضافه کنید.

Use the code below to visualize a stock’s moving averages using a dygraph. Once again, this code is using the “%>٪ "اپراتور برای ارسال اشیاء. عملکرد Dygraph () سهام را می پذیرد. به طور خاص ، قاب داده با نام ستون با C ("SMA_200" ، "SMA_50") فهرست بندی می شود. این شی در 2 خط بعدی به دیسری ها () منتقل می شود. شما می توانید به یک ستون با نام بنابراین Diseries () هر خطی برای مقادیر "SMA_50" و "SMA_200" در خطوط 2 و 3 مراجعه کنید. سرانجام ، من سایه هایی را برای تعریف دوره هایی اضافه کردم که می خواستید سهام خود را بخرید یا نگه دارید و دوره ای که باید سهام خود را فروخته باشید یا بسته به موقعیت خود ، دور بمانید.

در اینجا نتیجه نهایی در یک سری زمانی تعاملی است.

fox moving averages

میانگین حرکت روباه با مناطق سایه دار برای خرید/نگه داشتن در مقابل فروش

نتیجه

به عنوان یک معامله گر الگوریتمی جوان ، نیازی به ترسیم 70 سهم نیست. در عوض ، شما می خواهید هر روز کد را اجرا کنید و یک روش برنامه ای برای شناسایی سهام متناسب با روش مبتنی بر قانون اضافه کنید ، "اگر میانگین حرکت 50 روز بالاتر از میانگین حرکت 200 روز باشد" بخرید. وقتی نمودار قبلی را مرور می کنید ، بخش سبز زمانی است که در آن می توانید سهام فاکس را خریداری کنید. بخش قرمز نشان دهنده زمان فروش سهام شما و عدم مراجعه مجدد نیست.

از آنجا که نمودار تعاملی است ، می توانید از کشویی برای تغییر اندازه بصری استفاده کنید. بر اساس این رویکرد ساده تجارت Algo ، اکنون ممکن است زمان خوبی برای خرید فاکس باشد! 30 دسامبر 2016 یک روز معاملاتی بود که میانگین حرکت 50 روزه 0. 01 دلار بالاتر از میانگین حرکت 200 روزه حرکت کرد!

fox equity

بخش بزرگنمایی سهام روباه

البته به یاد داشته باشید که تمام سرمایه گذاری ها می توانند ارزش خود را از دست بدهند. برای کسب اطلاعات بیشتر در مورد امور مالی و تجارت ALGO ، دوره های DataCamp را از اینجا ببینید.

استراتژی برای تجارت گزینه های...
ما را در سایت استراتژی برای تجارت گزینه های دنبال می کنید

برچسب : نویسنده : فریبا کامران بازدید : 38 تاريخ : دوشنبه 22 خرداد 1402 ساعت: 19:51