در مقاله قبلی من ، "وای! Backtesting استراتژی متقاطع RSI در Elasticsearch "، نحوه بازگشت به تست استراتژی متقاطع RSI را معرفی کرد. در این مقاله ، ما یک استراتژی متقاطع تصادفی را پیاده سازی خواهیم کرد و عملکرد آن را با RSI مقایسه خواهیم کرد. اگرچه شاخص تصادفی توسط جورج سی لین در اواخر دهه 1950 ساخته شده و بسیار قدیمی است ، اما هنوز هم بسیار محبوب است. مشابه نشانگر RSI ، تصادفی نیز حرکت قیمت بین 0 تا 100 است. بنابراین ، آنها را نوسان ساز می نامند. هر دو شاخص می توانند برای شناسایی مناطق بیش از حد و بیش از حد استفاده شوند. مشابه RSI ، نشانگر تصادفی یک منطقه فراز و نشیب زیر 20 و یک منطقه بیش از حد بالاتر از 80 را تعریف می کند.
تغییر قیمت در تصادفی به نوعی داده تبدیل می شود ، یعنی نسبت دو مسافت. فاصله بین آخرین قیمت بسته شدن C و جدیدترین قیمت بالا و فاصله بین آخرین قیمت بالا و جدیدترین قیمت پایین. معادله را می توان به شرح زیر بازنویسی کرد: MMAX N ، 1 و MMIN N ، 1 حداکثر در حال حرکت و حداقل مقادیر متحرک است. مطابق با عملکرد حرکت Elasticsearch با یک پنجره N ، باید داده های 1 را به سمت راست تغییر دهد تا داده های فعلی را درج کند. 14 دوره معمولاً برای پنجره n استفاده می شود.
مشابه MACD ، تصادفی همچنین یک خط سیگنال به نام ٪ D را تعریف می کند ، که یک SMA سه دوره از ٪ K است.
دو نوع شاخص تصادفی ، سریع و کند وجود دارد. سریعتر نسبت به تغییر قیمت نسبت به تغییر قیمت حساس تر است. سریع آن نسبت به آهسته ، سیگنال های خرید یا فروش بیشتری ایجاد می کند. تصادفی آهسته را می توان به شرح زیر تعریف کرد:
Stochastic crossover strategy can be defined as emitting a sell signal when the %K line crosses below the %D line in the overbought zone (>80) و انتشار سیگنال خرید هنگامی که خط ٪ K از خط ٪ D در سیگنال منطقه Oversold عبور می کند (< 20). For other values, be patient and wait for the buy or sell signal.
استفاده از نمودارها برای مشاهده تغییرات در مقادیر بسیار ساده تر است. در این مقاله ، ما سعی می کنیم از صندوق های مبادله ای بدون کمیسیون (ETFS) استفاده کنیم و به عنوان یک ابزار تجزیه و تحلیل بر روی Elasticsearch تمرکز کنیم. مثال زیر به طور تصادفی "ETF بین المللی بین المللی وفاداری" را انتخاب می کند. نماد تیک آن FDEV است. 10 ETF دیگر به طور تصادفی انتخاب می شوند و نتایج نهایی بعداً نشان داده می شود. داده ها از محدوده زمانی بین 2021-01-15 و 2021-05-31 ارائه شده توسط IEX ، مبادله سرمایه گذاران انتخاب شده است. نمودار زیر تصادفی (FK/SK) و خط سیگنال (FD/SD) را با قیمت بسته شدن روزانه کشیده شده است. در منحنی قیمت روزانه ، قیمت ها با سیگنال های فروش به رنگ قرمز مشخص می شوند و قیمت ها با سیگنال های خرید به رنگ آبی مشخص می شوند. همانطور که در شکل های زیر نشان داده شده است ، تعداد سیگنال های تولید شده توسط تصادفی کند کمتر از تصادفی سریع است.
در اینجا ، ما یک استراتژی متقاطع تصادفی ساده را ارائه می دهیم و از Elasticsearch برای نشان دادن جزئیات اجرای استفاده می کنیم.
◆ با فرض اینکه محدود به خرید و نگه داشتن 1 سهم در یک زمان محدود شده است ، تا زمانی که سهم نگهدارنده به فروش نرسد ، هیچ معامله ای رخ نمی دهد.◆ 1 سهم را بخرید وقتی FK/SK از FD/SD در منطقه Oversold عبور می کند (< 20). ◆ Sell 1 share when FK/SK crosses below FD/SD in the overbought region (>80)◆ در پایان دوره پشتی ، یک سهم نگهدارنده با قیمت فعلی کاهش می یابد.
طبق استراتژی معاملاتی تصادفی ، 5 امتیاز آبی و 11 امتیاز قرمز برای سریع تصادفی وجود دارد ، اما فقط 3 معامله خرید و 3 فروش مجاز است. 3 نقطه آبی و 10 امتیاز قرمز برای آهسته تصادفی وجود دارد ، اما فقط 2 معاملات خرید و 2 فروش مجاز است. بیایید اجرای را با استفاده از Elasticsearch شرح دهیم. فرض کنید یک شاخص Elasticsearch وجود دارد که دارای داده ها است ، و نقشه برداری داده های آن همان چیزی است که در مقاله قبلی شرح داده شده است. مراحل زیر کد بدنه درخواست API REST را نشان می دهد.
کلیه اسناد مربوطه را از طریق عملیات جستجو جمع آوری کنید
برای جمع آوری اسناد با نماد FDEV و تاریخ بین 2021-01-15 و 2021-05-31 از یک پرس و جو "BOOL" با یک بند "باید" استفاده کنید. با توجه به محاسبه 14 دوره برای حرکت حداکثر در دقیقه و دو دوره 3 دوره برای SMA در تصادفی کند ، داده های اضافی برای 1 ماه تنظیم می شود (از 12-15-15 تا 2021 تا 2021-14).
ارزش نزدیک صندوق را استخراج کنید
از یک جمع "date_histogram" ، به نام backtest_stochastics ، با پارامتر "فیلد" به عنوان "تاریخ" و پارامتر "فاصله" به عنوان "1D" استفاده کنید تا قیمت صندوق را هر روز استخراج کنید. سپس به دنبال یک جمع "متوسط" ، به نام روزانه ، برای بازیابی قیمت نزدیک از آنجا که تجمع خط لوله بعدی نمی تواند به طور مستقیم از زمینه های سند استفاده کند.
تاریخ سطل را استخراج کنید
به دلیل داده های اضافی ، عملیات بعدی باید بعداً بخش خارج از حد را فیلتر کنند. جمع "حداقل" به نام "Datest" به دست آوردن تاریخ سطل است. در سرور Elasticsearch ، تاریخ در زمان EPOCH ذخیره می شود. واحد زمانی میلی ثانیه است و منطقه زمانی UTC است.
سطل ها را با بیش از 1 سند انتخاب کنید
برای فیلتر کردن سطل های خالی (روزهای غیر تدارک) ، یک جمع "سطل_ لیست" ، به نام SD Daily ، برای انتخاب سطل با تعداد اسناد آن بیشتر از 0 استفاده می شود.
حداکثر و حداقل قیمت نزدیک روزانه را محاسبه کنید
از دو جمع "Moving_FN" به نام MMAX و MMIN استفاده کنید ، با پنجره پارامتر به عنوان 14 و پارامتر "Buckets_Path" به عنوان روزانه. پارامتر "Shift" روی 1 تنظیم شده است تا جدیدترین داده ها را شامل شود. MMAX و MMIN با استفاده از توابع movefunctions. max () و movefunctions. min () محاسبه می شوند.
٪ k و ٪ d از تصادفی سریع و آهسته را محاسبه کنید
از سه جمع "bucket_script" ، fk برای سریع ٪ k ، fdsk برای ٪ d و ٪ k آهسته و SD برای آهسته ٪ d استفاده کنید. برای مشخص کردن نتایج از روزانه ، MMIN و MMAX از پارامتر "Buckets_Path" استفاده کنید. سپس ، سریع ٪ k با توجه به معادله در فیلمنامه محاسبه می شود. FDSK SMA 3 دوره K ٪ K و SD SMA 3 دوره FDSK است. پارامتر "Shift" روی 1 تنظیم شده است تا جدیدترین داده ها را شامل شود.
نوع متقاطع ٪ k و ٪ d را مشخص کنید
الف) از یک جمع "bucket_script" به نام FKFD_DIFF استفاده کنید ، با پارامتر "Buckets_Path" برای مشخص کردن مقدار FK و FDSK برای تعیین اینکه آیا فاصله مثبت است یا منفی است. اگر FK بالاتر از FDSK است ، آن را روی 1 تنظیم کنید. اگر FK زیر FDSK است ، آن را رو ی-1 تنظیم کنید. اگر آنها برابر باشند ، در 0. تنظیم کنید.
ب) از یک جمع مشتق به نام F_DIFF با پارامتر "Buckets_Path" استفاده کنید تا مقدار FKFD_DIFF را مشخص کنید تا تفاوت در مقدار زمان بندی را در پیش بگیرید. برای سریع تصادفی ، مقدا ر-1 ی ا-2 نشان می دهد که بین FK و FD تلاقی وجود دارد. مقدار 1 یا 2 نشان می دهد که یک تلاقی بین FK و FD وجود دارد. تجمع S_DIFF را می توان به همان روش برای آهسته تصادفی تعریف کرد.
ج) عبور ٪ k و ٪ d ممکن است یک یا دو روز معاملاتی را شامل شود. بنابراین ، ما از روز معاملاتی قبلی به داده ها نیاز داریم. با استفاده از پنجره پارامتر به عنوان 1 و پارامتر "Buckets_Path" به عنوان FK با عملکرد MovingFunctions. Sum () از یک جمع "Moving_fn" به نام Pre_fk استفاده کنید. تجمع pre_fdsk و pre_sd را می توان به همان روش تعریف کرد.
د) هنگامی که عبور ٪ K و ٪ D شامل دو روز معاملاتی است ، یکی از روزهای معاملات ممکن است در منطقه بیش از حد یا بیش از حد نباشد. برای اطمینان از وقوع متقاطع در منطقه راست ، اولین روز معاملاتی متقاطع باید در منطقه بیش از حد یا فراگیر باشد. از نتایج آزمایشی ، محدود کردن هر دو روز معاملاتی در منطقه بیش از حد یا بیش از حد ممکن است نتایج خوبی به همراه نکند. بنابراین ، ما روز تجارت دوم تقاطع را بی ربط می دانیم. برای تعیین اینکه آیا متقاطع معتبر است ، معیارهای زیر را برای جمع آوری F_Type بررسی کنید. اگر این یک سیگنال فروش است ، f_type را روی 1 تنظیم کنید. اگر سیگنال خرید است ، f_type را رو ی-1 تنظیم کنید. در غیر این صورت ، F_Type را روی 0. تنظیم کنید. S_Type جمع می تواند به همان روش تعریف شود.
◆ Within overbought region params.PRE_FK > 80 && params.PRE_FDSK >80 ◆ within oversold params. pre_fk< 20 && params.PRE_FDSK < 20 ◆Crossovers need to concern within oversold region params.F_Diff == -1 || params.F_Diff == -2 ◆Crossovers need to concern within overbought region params.F_Diff == 1 || params.F_Diff == 2 ◆FK cross below FDSK params.FK ◆FK cross above FDSK params.FK >= params. fdsk
اسناد اضافی را برای خروجی فیلتر کنید
برای انتخاب سطل های صحیح از یک جمع "bucket_selector" به نام S_Date ، با پارامتر "Buckets_Path" استفاده کنید. معیارهای انتخاب آن سطل هایی هستند که تاریخ آن را در تاریخ یا بعد از 2021-01-15 (زمان دوره 1612137600000 در میلی ثانیه) دارند.
پس از جمع آوری نتیجه ، می توانیم ارقام را مطابق آنچه قبلاً نشان داده شده است ترسیم کنیم.
نتیجه اجرای ، سیگنال های خرید ، فروش یا نگه داشتن سیگنال را منتشر می کند. با این حال ، این سیگنال ها فقط موارد دوم و سوم را از استراتژی تجارت متقاطع تصادفی ساده برآورده می کنند. برای موارد اول و چهارم ، برای کدگذاری برنامه باید از زبان برنامه نویسی پایتون استفاده کنیم. این برنامه شامل چهار بخش است.
دو پارامتر خط فرمان را بخوانید. یکی برای نماد انتخاب شده انتخاب شده است ، و دیگری برای نام پرونده حاوی استراتژی معاملاتی که در Elasticsearch REST API Body با استفاده از فرمت JSON نوشته شده است.
◆ داده ها را از سرور Elasticsearch دریافت کنید.◆ داده های پاسخ را تجزیه کنید و سیگنال خرید و فروش را اصلاح کنید.◆ آمار Backtest را گزارش دهید.
عملکرد اصلی به شرح زیر نشان داده شده است:
◆ داده ها را از سرور Elasticsearch دریافت کنید.◆ داده های پاسخ را تجزیه کنید و سیگنال خرید و فروش را اصلاح کنید.◆ آمار Backtest را گزارش دهید.
عملکرد اصلی به شرح زیر نشان داده شده است:
در این مقاله ، فقط بخش کد برای پالایش سیگنال خرید و فروش نشان داده شده است. خوانندگان می توانند بیشتر به پروژه منبع باز در GitHub (backtest_stochastics) مراجعه کنند. برای اطمینان از اینکه یک سهم در یک زمان خریداری و نگهداری می شود و قبل از فروش سهام نگهدارنده هیچ معامله ای رخ نمی دهد ، ما از متغیر Boolean "Hold" استفاده می کنیم تا اطمینان حاصل شود که معامله شرایط زیر را برآورده می کند.
◆ سیگنال خرید (مقدار برابر ب ا-1) وقتی که پرچم نگهدارنده کاذب است ، افتخار می شود ◆ یک سیگنال فروش (مقدار برابر با 1) در صورت صحیح بودن پرچم نگهدارنده افتخار می شود
عملکرد parse_data () به شرح زیر نشان داده شده است. سرانجام ، آرایه معامله حاوی سیگنال معتبر خواهد بود.
برنامه پایتون آماری در مورد استراتژی معاملاتی از جمله "پیروزی" و "از دست دادن" کل معامله خرید و فروش ارائه می دهد. نتیجه زیر پس از اجرای FDEV برای سیگنال F_Type است.
در جدول زیر تمام داده های آماری 11 ETF به طور تصادفی انتخاب شده با استفاده از استراتژی معاملات متقاطع تصادفی سریع از 2021-01-15 تا 2021-05-31 جمع آوری شده است. نتایج نشان می دهد که این دوره دوره خوبی برای تجارت است زیرا تمام نمادهای منتخب می توانند به جز FTEC ETF سود داشته باشند. با این حال ، براساس توصیه های اکثر معامله گران از یک شاخص واحد برای تجارت استفاده نکنید.
جدول زیر برای نتیجه با استفاده از یک استراتژی معاملاتی متقاطع تصادفی آهسته از 2021-01-15 تا 2021-05-31 است. این نشان می دهد که هیچ معامله ای برای FQAL انجام نشده است.
جدول زیر مقایسه نتیجه تجارت استراتژی بین سریع تصادفی ، کند تصادفی و RSI است. این نشان می دهد که RSI نسبت به دو شاخص دیگر سود بالاتری دارد.
جدول زیر خلاصه ای از تعداد بار خرید ، فروش ، برنده و ضرر را نشان می دهد. استراتژی معاملات متقاطع RSI عملکرد بهتری دارد.
اظهارات: I. با تشکر از IEX (مبادله سرمایه گذاران) ارائه داده های ETF و GitHub که ذخیره پروژه منبع باز را فراهم می کند. II. این مقاله مبتنی بر یک فکر فنی است و هیچ مشاوره سرمایه گذاری را تشکیل نمی دهد. خوانندگان باید هنگام استفاده از آن مسئولیت های خود را بر عهده بگیرند. iiiهنوز ممکن است در مقاله خطایی داشته باشد ، و من از خوانندگان می خواهم که مرا اصلاح کنند. IVآن دسته از خوانندگانی که احساس علاقه می کنند می توانند به کتاب نویسنده نویسنده برای مهارت های اساسی Elasticsearch مراجعه کنند."پیشرفته Elasticsearch 7. 0" ، آگوست 2019 ، Packt ، ISBN: 9781789957754.