III. ایجاد استراتژی های تجاری سودآور

  • 2022-08-18

دو راه برای کسب سود به لطف مدل های یادگیری عمیق.

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

Now that we have built our models with the training set and compared them on the validation set (Article II — [1]), we will backtest 2 strategies in front of totally new data (the test set). The first approach is simply to pick the best-performing model over the validation set, and follow its advice when it predicts a bullish trend ( preds = 1 ). The second approach is more evolved : we look for the threshold l such that we can generate the highest ROI when selecting timesteps where the best model predicts a probability higher than l, i.e. we seek for l such that limiting our trades to the cases where proba_best_model >l بهترین سود را به همراه دارد.

0 - بارگیری کتابخانه ها و مجموعه داده ها

I - تعریف توابع برای بک تست

II - یک استراتژی ساده: بهترین مدل خود را انتخاب کنید و در صورت صعودی از آن پیروی کنید

III - استراتژی تکامل یافته تر

IV - نتیجه گیری

0 - بارگیری کتابخانه ها و مجموعه داده ها

مانند دو مقاله قبلی، ابتدا باید کتابخانه ها، داده ها را وارد کنیم و ثابت ها را تعریف کنیم (برای جزئیات بیشتر به مقالات دیگر مراجعه کنید). به خصوص، ما توقف ضرر، برداشت سود، لیستی از nPCهایی را که در طول ساخت مدل ها مقایسه کردیم، تعریف می کنیم. برای بک تست، ما همچنین باید ارزش کارمزدها را برای هر تراکنش تعیین کنیم: در مورد مبادله Poloniex [2] این مقدار حدود 0. 125٪ است، اما شما می توانید این مقدار را با مقدار خود تطبیق دهید. ما همچنین حداقل تعداد معاملات مورد نیاز برای در نظر گرفتن یک استراتژی را در طول رویکرد دوم تعریف می کنیم (50 معامله آستانه خوبی است). کد اولیه به صورت زیر است:

I - تعریف توابع برای بک تست

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

تابع دوم در واقع تابع بک تست است. مجموعه تست را به عنوان ورودی، مدلی که می‌خواهیم بک تست کنیم و ثابت‌های ما را می‌گیرد. سپس پیش‌بینی‌ها را روی مجموعه آزمایشی محاسبه می‌کند و درآمدهای پس‌آزمایش‌شده را در ستونی به نام «EarningsBullish» محاسبه می‌کند. همانطور که ما به دنبال ساخت یک ربات معاملاتی صعودی هستیم، پیش‌بینی‌های نزولی را فیلتر می‌کنیم (preds = 0). ما می‌توانیم با مجموعه ضرر و زیان و سود برداشتی، نگاهی به شکل این ستون پس از محاسبه داشته باشیم. به یاد می آوریم که "نتیجه" نتیجه حقیقت پایه است و "preds" پیش بینی مدل است:

کد تولید بک تست در زیر آمده است:

II - یک استراتژی ساده: بهترین مدل خود را انتخاب کنید و در صورت صعودی از آن پیروی کنید

زمانی که توابع بک تست خود را تعریف کردیم، می‌توانیم رویکرد اول را بررسی کنیم. این رویکرد صرفاً پیروی از پیش‌بینی‌های صعودی بهترین مدل است. سپس نمایه PnL (سود و زیان)، نقاط ورودی و ROI (بازده سرمایه گذاری) را نمایش می دهیم. در نهایت، ممکن است بخواهیم ارزیابی کنیم که عملکرد تا چه حد عالی است. برای انجام این کار، عملکرد رویکرد را با میانگین بازدهی در طول دوره آزمایش (با ضرر و زیان و سود برداشتی) مقایسه می‌کنیم: به این معنا که اگر همیشه در هر مرحله زمانی روی مجموعه آزمایشی شرط‌بندی صعودی داشته باشیم، بازده مورد انتظار را بررسی می‌کنیم. با این تکنیک، ما واقعاً می توانیم عملکرد روش خود را مستقل از شرایط بازار ارزیابی کنیم. ما معیاری به نام avg_return_benchmark به دست خواهیم آورد که آن را با عملکرد خود مقایسه می کنیم. برای انجام این کار، اهمیت آماری عملکرد خود را با مقایسه آن با میانگین معیار از طریق آزمون t آزمایش می کنیم [3].

عملکرد نسبت به معیار برتر است و حتی وقتی یک آزمون t را انجام می دهیم (مقدار p.

آنچه در مورد مثال ما به دست می آوریم مانند این است:

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

برای اهداف اطلاعاتی ، این رویکرد در هر تجارت 3. 3698 ٪ نسبت به مجموعه آزمایش ، با 897 تجارت گرفته شده و 516 به پایان رسید تا به TakeProfit (دقت 57. 52 ٪) برسد.

کد برای تولید و پشتی این استراتژی اول موارد زیر است:

III - یک استراتژی تکامل یافته تر

As presented earlier, the principle of this second approach can be summarized as following : we pick the best model, and look for the threshold l such that limiting the trades to cases where proba_bullish >L سودآورترین استراتژی را به دست می آورد. برای انجام این کار ، ما باید بهترین مدل را در اعتبار سنجی_د ارزیابی کنیم ، در غیر این صورت رویکرد قابل تعمیم نخواهد بود. اولین قدم ایجاد تابعی است که یک جدول recapitulative مانند این را ایجاد می کند (شکل 8) ، که می توانیم برای هدف تصویرگری نمایش دهیم (شکل 9):

Once we have computed and saved this table, we simply pick the threshold which yields the best ROI. In our example we can see that the best threshold is l =0.95 . We can then evaluate this strategy (keeping predictions where proba_best_model >0. 95) در مجموعه آزمون به گونه ای که می توانیم ببینیم که چگونه این رویکرد بر روی داده های کاملاً جدید انجام می شود. ما مشاهده می کنیم که این استراتژی بار دیگر سودهای خوبی را به همراه دارد ، با ROI که حتی بالاتر از روش اول (3. 41 ٪ در مقابل 2. 90 ٪) است. همه این مشاهدات تمایل به تأیید استحکام و اعتبار روش ما دارند.

همچنین ، عملکرد نیز قابل توجه است (مقدار P ، که یک نکته عالی است:

همانطور که در اولین رویکرد ، ما می توانیم در ماه های اول بزرگنمایی کنیم تا ارتباط چنین ربات معاملاتی را ببینیم:

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

این رویکرد در هر تجارت 4. 1668 ٪ نسبت به مجموعه آزمون ، با 498 معاملات گرفته شده و 313 تا به پایان رسید تا به کارآیی (62. 85 ٪ دقت) برسد.

کد برای تولید رویکرد دوم در آنجا نوشته شده است:

IV - نتیجه گیری

ابتدا ممکن است به یاد بیاوریم که کد کامل در مخزن در [4] موجود است. من حتی یک اسکریپت به نام Pipeline_i_to_iii. py [5] درست کردم: شما فقط باید تنظیمات Stoploss ، TakeProfit ، Dating Dates و Datastet را تنظیم کنید و خط لوله تمام مراحل را به صورت خودکار انجام می دهد (محاسبه متغیرها ، PCA ، مدل های ساختمان ، ارزیابی ، شناسایی استراتژی های سودآور)با گرفتن همان مجموعه داده ای که من در دوره این سری از مقاله (موجود در مخزن موجود در مخزن موجود است) ، در نهایت نتایج دقیقی را خواهید فهمید.

در طی این مقاله ، ما دو استراتژی تجاری سودآور ایجاد کرده ایم. این استراتژی ها بهتر از معیار عمل می کنند - یعنی آنها دقیق و سود کافی دارند - و حتی نتایج قابل توجهی نیز دارند. ما بررسی کردیم که این استراتژی ها سود داده های کاملاً جدید را به دست می آورند ، که به شما نشان می دهد که اجرای زندگی واقعی آنها نیز در طولانی مدت سود حاصل می کند.

شایان ذکر است که ما می توانیم مشاهده کنیم که مدل هیچ روند صعودی دیگری را پیش بینی نمی کند زیرا قیمت BTC بیش از 15 هزار دلار منفجر شده است: این ممکن است به این دلیل باشد که مجموعه داده ما ثابت نیست. این مدل فکر می‌کند که قیمت در مجموعه قطار به مقادیر معمول خود کاهش می‌یابد. ما می‌توانیم با ثابت کردن آن در وهله اول، تغییر ضرر/میزان سود برای نوسانات کوتاه‌مدت یا - به عبارت ساده‌تر - با اضافه کردن برخی متغیرهای کنترل نرمال شده مانند MACD از این مشکل جلوگیری کنیم. با این حال، اگر خط لوله را برای دارایی‌ای اعمال کنیم که سال‌ها در محدوده محدودی قرار داشته است، ممکن است مشکل حل شود. همچنین، از آنجایی که هدف یک ربات معاملاتی شرط بندی بر روی تمایلات کوتاه مدت به جای سرمایه گذاری بلندمدت است، این مسئله بزرگی نیست. همچنین می‌توان مشاهده کرد که زمان‌های اخیر که مدل یک روند صعودی را پیش‌بینی می‌کند، بسیار دقیق هستند (گزینه‌پذیری بالا).

اکنون که استراتژی‌های خود را شناسایی کرده و مورد آزمایش مجدد قرار داده‌ایم، ممکن است بخواهیم آنها را برای تجارت واقعی پیاده‌سازی کنیم. این دقیقاً هدف مقاله بعدی (مقاله IV) است که نشان می دهد چگونه می توان چنین ربات تجاری را در پایتون مستقر کرد. ربات معاملاتی با Poloniex API که یک پلتفرم مبادله ارزهای دیجیتال است، توسعه خواهد یافت. با این حال، چارچوب به راحتی می تواند با هر API یا سیستم کدنویسی دیگری سازگار شود.

همچنین، مقاله کاملی که در مورد ربات معاملاتی پیشرفته نوشتم در [6] موجود است. از گذاشتن بازخورد/سوال/کف زدن یا تماس با من برای اطلاعات بیشتر دریغ نکنید.

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.