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

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

Photo by NeONBRAND on Unsplash
Photo by NeONBRAND on Unsplash

تو این پست میخوام چند تا مثال حول و حوش این مسائل رو با هم مرور کنیم. اینکه ماشین لرنینگ واقعا چکار عملیاتی میتونه بکنه که قابل اجرا باشه و اینکه چه کارایی رو فعلا نتونسته بکنه و صرفا چهارتا شارلاتان ادعاشو میکنن. سعی کردم خیلی منسجم و پایه ای بریم جلو و برای همین طبیعتا خیلی عمیق نمیشیم رو ریزه کاری ها ولی خب یه مرور میکنیم ورک فلویی که بدک بنظر نمیرسه و خوب هم داره جواب میده. من یه دیتاست واقعی از کارای خودم و کل کدهای این پست رو گذاشتم تو درایو که میتونید دانلود کنید و کد رو روشون اجرا کنید. بر اساس این دیتا میخواهیم چند تا مساله رو بررسی کنیم :

۱- درباره اندیکاتور ها و معاملاتی که احتمالا فکر میکنیم سود ده هستن صحبت می کنیم.

۲- در مرحله بعد میخواهیم ببینیم ماشین لرنینگ چجوری میخواد به استراتژی مون کنه؟

۳- در مرحله بعد میخواهیم مدل و ارز بهینه برای استراتژی مون رو پیدا کنیم.

۴- نهایتا هم نتیجه گیری میکنیم و درباره چند تا ریزه کاری صحبت میکنیم و اینکه چکار کنیم که بهتر بشه و اینا :)


۱- انتخاب استراتژی، تعریف اندیکاتور شخصی و چگونگی چک کردن شون

اگر تا اینجا اومدید احتمالا شما قبلا تو این وادی بودید و مثل من تازه وارد حساب نمیشید و خب یه استراتژی دارید یا اینکه با یه سری اندیکاتور ها حس راحتی میکنید و حدس میزنید که بشه باهاشون کارای خوبی کرد.

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

من کدهامو جمع و جور کردم و یه بات تلگرام نوشتم برای اینکه خروجی عملیاتی قابل استفاده بده. طبیعتا یک قصدم از این کار شوآف بود و اثبات اینکه دارم معامله ها رو قبل از اینکه اتفاق میافته پیش بینی میکنم، ولی خب دلیل اصلی این بود که روشی داشته باشم که بتونم باهاش معامله کنم در آینده خیلی نزدیک. خروجی ها حیرت انگیر بودن. گاهی ۲ معامله تا ۱۰۰۰ پوینت در یک روز. بعدا درباره استراتژی ام تو همین مطلب صحبت میکنم. ولی من در کل ۴ تا خط تولید میکردم در ابتدای هر روز که فکر میکردم با یه روش خاصی روش ترید های خوبی انجام داد.

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


ولی داستان از این قرار هست که معمولا شما وقتی یه سری معامله توپ پیدا میکنید، تو بک تست های طولانی مدت این معامله ها به حالت ۵۰ ۵۰ یا حتی چیزی بدتر از اون ختم میشن. معامله های من هم طبیعتا از این قضیه پیروی میکردن.

برای ساختن این معامله ها، در واقع من اومدم یه سری خطوط رو تعریف کردم که خود اون خط ها رو با ماشین لرنینگ در میاوردم. دوستان میگفتن من دارم خطوط حمایت و مقاومت رو تعیین میکنم ولی خب خودم یه سری کد زده بودم و یه سری خط روی نمودار میدیدم. یک مقدار بررسی کردم و بنظرم میرسید که اگر قیمت زیر پایین ترین خط آبی باز بشه میشه از همون خط آبی پایینی buy/بای گرفت تا بالاترین خط قرمز. و به همین منوال حالت برعکس اش که اگر بالای بالاترین خط قرمز باز بشه تا پایین ترین خط آبی sell/سل بگیریم. من یه کد برای بک تست نوشتم.خروجی ها رو گرفتم و تر و تمیز کردم به این صورت که اگر شکست خورده تو ستون result صفر گذاشتم و اگر برده باشه (چه کامل تا tp رفته یا اینکه وسط راه مونده و تایم به پایان رسیده) عدد یک در نظر گرفتم. خروجی کامل رو میتونید تو پوشه files/all مشاهده کنید. یا اینکه کد evaluate_ds.py رو اجرا کنید و ببینید که اوضاع از چه قرار هست برای هر ارز.

خروجی این شکلی هست.

EURNZD
 start label ... diff_to_first result
 count 225.000000 225.000000 ... 225.000000 225.000000
 mean 1.675467 3592.080000 ... 0.002670 0.515556
 std 0.017601 359.306913 ... 0.002103 0.500872
 min 1.643000 3478.000000 ... 0.000011 0.000000
 25% 1.660340 3478.000000 ... 0.000931 0.000000
 50% 1.673980 3478.000000 ... 0.002194 1.000000
 75% 1.691070 3478.000000 ... 0.003977 1.000000
 max 1.717480 7348.000000 ... 0.009474 1.000000


اگر فقط بخواهیم رو result فوکوس کنیم، خروجی که فعلا همون count و mean برامون مهم هست این شکلی میشه:

EURNZD
count 225.000000
mean 0.515556
std 0.500872
min 0.000000
25% 0.000000
50% 1.000000
75% 1.000000
max 1.000000

خب EURNZD فکر کنم یکی از خیلی خوبها بوده، که در طول این مدت تعداد بردها از باخت ها مقدار اندکی بیشتر بوده. مثلا این رو ببینید:

EURJPY
mean 0.40708

برخی ارزها کلا خیلی داغون تر هستن و این میانگین شون زیر ۴۰ درصد هم شده :/

درنهایت، بطور خلاصه بعد از مدتی تلاش من تونسته بودم معامله هایی پیدا کنم که در بلند مدت ۴۰ درصدشون برد بودن و ۶۰ درصد باخت :/ (من استراتژی های دیگه ای هم داشتم ولی برای اینکه تاثیر ماشین لرنینگ بولد تر باشه از همین داغون ترین استراتژی استفاده میکنم و تا انتهای این پست سعی میکنم بهینه اش کنم.)

منطقا به اینجا که میرسیم باید بگیم خب بریم اون خط ها رو تغییر بدیم یا اینکه بین این خطوط جور دیگه ای معامله کنیم یا... ولی این جا دقیقا جایی هست که اون شخصیت ول نکنِ یک دیتا ساینتیست باید ظاهر بشه و بگه امید داشته باش لابد راهی هست داداچ. و اینجا ابتدای راهی هست که بسیار مهم هست:

شما کارای آماری کردید و در نهایت دیدید که معامله هایی دارید که ۴۰ درصد برد و ۶۰ درصد باخت هستن؟ اینجا دقیقا جایی هست که ماشین لرنینگ میتونه به شما کمک کنه. چطور؟ ماشین میتونه یاد بگیره که کدوم معامله ها به پیروزی و کدوم ها به شکست منجر میشه. در واقع روی کاغذ که اینطوری هست :)اگر حوصله ندارید تا ته این نوشته برید همینجا بگم که اگر فیچر های خوبی رو بتونید در بیارید،در عمل هم ماشین با دقت خوبی میتونه معامله هایی که به برد ختم میشن رو قبل از اینکه وارد معامله بشید پیش بینی کنه.


۲- چجوری از ماشین لرنینگ برای پیش بینی برد و باخت استفاده کنیم؟

ایده خام من این بود. گفتم روی هر جفت ارز من دارم یه سری معامله پیدا میکنم که تعدادشون بدک نیست. اگر بتونم با دقت خوبی پیش بینی کنم که کدوم معامله به برد و کدوم به باخت ختم میشه، در نهایت من مثلا حدودا ۷۰ درصد معامله ها رو پیروز میام بیرون نه ۴۰ درصدشون رو. و خب میتونم به مرور فیچر ها رو تغییر بدم یا اینکه کاری بکنم که دقت ام بیشتر بشه و دیگه برم که پولدار بشم:)

برای این کار اومدم دیتاست اولیه رو آماده کردم و کلی روی فیچر ها کار کردم. اومدم از سال ۲۰۱۳ تا آخر ۲۰۱۸ رو بک تست گرفتم به این صورت که ابتدای هر روز تعیین میکردم که خطوط چیا هستن. بعد اگر معامله رخ میداد اون رو ثبت میکردم. بعد رو این خروجی ها باینری کلاسیفایر ران میکردم. خروجی های اولیه بشدت دقت کمی داشت و به زور به ۶۰ میرسیدن. از طرفی داده های من بایاس بودن. یعنی تعداد بردها با باخت ها برابر نبود. در نتیجه شما در نظر بگیرید که اگر من بجای محاسبه و ایجاد مدل، صرفا یک کد داشتم که همیشه عدد صفر(به معنی باخت) رو برمیگردوند. خب ۶۰ درصد معامله ها باخت بود و این کلاسیفایر هم ۶۰ درصد دقت داشت :) نتیجه اخلاقی اینکه من گند زده بودم یا شاید چیزی فراتر از اون :)

به مرور داشت یه سری موارد دستم میومد. مثلا وقتی داده های train و test بلحاظ زمانی به هم نزدیک میشدن من دقت بالاتری میگرفتم که بعدا فهمیدم بخاطر واریانس شدیدی هست که داره به وجود میاد. یا به جای استفاده از تعاریف معمول accuracy اومدم و گفتم من از این مدل فقط مقادیر ۱ (پیش بینی برد) برام مهمه. دقت رو اینطوری تعریف کردم که چند درصد مقادیر برد واقعا به برد منجر شدن؟ چون اونایی که مدل میگه به باخت منجر میشه که در هنگام عمل من اکشنی انجام نمیدم براشون.

یه مقداری فیچر ها رو کم و زیاد کردم و از ۷-۸ فیچر رسوندم شون به ۱۷-۱۸ تا فیچر. از طرفی بجای اینکه بیام ودر ابتدای هر روز خط ها رو تعیین کنم و بریزم تو دیتاست، اومدم و گفتم میام و هر ساعت این کارها رو تکرار میکنم. اینطوری داده ها به هم نزدیک میشن. یه سری کارای دیگه هم کردم که خب خروجی بشدت دچار تغییر شد. باور کردنش سخت بود ولی من مدلی داشتم که رسیده بود به درصد درستی معاملات مثبت با دقتی بالای ۹۰ درصد :)

اینجا اطلاعات بیشتری هست از روند کارها. خود عکس رو هم از اینجا برداشتم. از ۵۰ معامله که ماشین گفته ترید مجاز هست، ۴۶ تاش به برد منجر شدن یعنی ۹۲ درصد دقت.
اینجا اطلاعات بیشتری هست از روند کارها. خود عکس رو هم از اینجا برداشتم. از ۵۰ معامله که ماشین گفته ترید مجاز هست، ۴۶ تاش به برد منجر شدن یعنی ۹۲ درصد دقت.


اما از دوباره دنیا جای خوبی نیست :/ وقتی بصورت معمولی داده های train و test رو از هم جدا میکردم، در همون حال که مدلها عین بنز داشتن کار میکردن و دقت ها بالا بود وقتی داده های روز بعد رو میدادم گند میخورد به همه چی. دقت ها پایین و کلا همه چیز تو یه فاز دیگه ای بود. تازه معما شروع شده بود. اینجا دیگه با نزدیک کردن داده ها یا اون کلک های قبلی اتفاقات مثبتی رخ نمیداد و خب وقتی مدل نمیتونه درباره فردا درست بگه ولی دیروز رو خوب داره طبقه بندی میکنه به درد لای جرز دیوار هم نمیخوره.

همینطور که داشتم دیتاست رو بالا پایین میکردم یهو متوجه یه نکته شدم. با اضافه کردن زمان پیش بینی، زمان استارت معامله، و زمان پایان معامله ها، برخی معامله ها که همزمان با هم داشتن اجرا میشدن باعث میشدن که اساسا بلحاظ زمانی دیتا ها با هم قاطی بشن و انگار داده ها مقداری از آینده خبر داشتن و این باعث میشد که تو عملیات همه چی قاطی بشه. اینجا بود که تصمیم گرفتم برای وریفای کردن مدل ها داده هایی که برای تست استفاده میکنم رو حتما با این شرط استفاده کنم که زمان پیش بینی اش بزرگتر مساوی همه معامله های موجود تو train باشه. این شرط باعث شد که هم اون دقت ها کم بشه و هم مدل های زیادی از گردونه حذف بشن. این وسط ریزه کاری هایی هم هستن که ممکن هست من فراموش کرده باشم توضیح بدم. مثلا الان یادم اومد که برای اینکه داده ها خیلی بایاس نباشن یه پارامتر اضافه کردم که اگر میانگین برد و باخت ها تو داده های train از ۴۰ درصد کمتر بود اصلا روش کاری انجام نشه که میتونید اینها رو خودتون دستکاری کنید و خروجی ها رو مقایسه کنید. یه نکته دیگه دیگه هم استفاده از احتمال درستی بود که مدلها میدادن. یعنی از خود مدل میپرسیدم اینکه میگی معامله خوبی هست و به برد منجر میشه رو چند درصد مطمئنی؟ مجموع این ریزه کاری ها بشدت رو خروجی نهایی تاثیر مثبت داشتن.

خروجی اولیه با همه مدلها و همه ارز ها رو میتونید با اجرای کد AllClassifiers.py ببینید. طبیعتا میتونید همه پارامتر ها رو سیخ بزنید یا اینکه بجای اینکه حین اجرا بگیرید زمان ها رو مرتب کنید یه فایل درست کنید و یه مپ بسازید که علاف نشید :)


۳- انتخاب مدل و ارز بهینه با یادگیری بدون نظارت / UNSUPERVISED LEARNING

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

راستش اون اوایل برای انتخاب مدل خیلی اذیت شدم و در نهایت QDA رو انتخاب کرده بودم ولی بعدا که فیچر های دیتاست رو بیشتر کردم و یه سری تمیزکاری ها کردم تصمیم ام عوض شد. مثلا پایدار نبودن خروجی خیلی از مدلها، یا اینکه برخی مدلها اصلا اتریبیوت های مد نظر من رو نداشتن تو انتخاب مدل تاثیر داشت. جدا از همه اینها نوع داده ها و دقت مدل ها در تعیین معامله های منجر به برد هم تعیین کننده بود.در نهایت XGBOOST از همه بهتر بود برای کاری که میخواستم بکنم.

برای انتخاب ارز اومدم و یه فرضیه رو آزمایش کردم.گفتم اگر بشه این داده ها رو بصورت کاملا بدون نظارت طوری کلاستر کرد که توشون حتی یک کلاستر داشته باشیم که بیش از ۷۵ درصد داده ها معامله های منجر به برد قرار گرفته باشن و همچنین یک کلاستر داشته باشیم که ۷۵ درصدشون منجر به باخت باشن، میشه گفت که احتمالا وقتی کار به کلاسیفای میرسه هم با دقت خوبی بشه آینده رو پیش بینی کرد. البته حواسم باید باشه که تعداد اعضای این کلاستر ها هم باید از یک مقداری بیشتر باشه که خیلی همه چیز شانسی جلو نره.

خب یه مشکل همون اول داریم که داده هامون بیش تر از ۳ بعد دارن و تو نمایش و تصورشون مشکل داریم. اینجا دو تا راه مرسوم هست. استفاده از PCA یا t-sne که هر کدوم مزایا و معایب خودشون رو دارن. من با PCA کار کردم. کاری که PCA اینجا میکنه اینه که ابعاد داده رو برامون کاهش میده به ۲ بعد. قبل اینکه بریم جلو تر من اومدم و ازین شکل خوشگلا کشیدم ببینم کلا چند چندیم با هم:) هدفم این بود که اگر داده ها بیان و به دو خوشه کلی تقسیم بشن چه شکلی هست نحوه قرار گرفتنشون کنار هم. طبیعتا اینجا میدونم که داده ها تو دو کلاستر هستن و اون رو هم در اجرای Kmeans لحاظ کردم. برای اینکه همه خروجی ها رو ببینید میتونید فایل Kmeans.py رو اجرا کنید تا انواع و اقسام توزیع شدن رو ببینید.

تو ارز CADCHF خیلی سخت بنظر میرسه جدا کردن داده در خوشه هایی که اکثریت اعضاشون به برد یا باخت ختم بشن.
تو ارز CADCHF خیلی سخت بنظر میرسه جدا کردن داده در خوشه هایی که اکثریت اعضاشون به برد یا باخت ختم بشن.
تصویر NZDCAD که میگه داده ها نسبتا خوب از هم فاصله دارند. حالا باید دید در عمل هم اکثریت اینها به یک نتیجه رسیدن؟
تصویر NZDCAD که میگه داده ها نسبتا خوب از هم فاصله دارند. حالا باید دید در عمل هم اکثریت اینها به یک نتیجه رسیدن؟


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

در نهایت اومدم و همه کلاسترها رو روی همه ارز ها چک کردم و هر کلاستری که اعضای داخلش بیش از ۷۵ درصدشون تو یک گروه هستن رو پرینت کردم. همونطور که گفتم برنده ماجرا ارزهایی هستن که لااقل یک کلاستر داشته باشن که تقریبا اکثر اعضا باخت باشن و یک کلاستر هم اعضایی که تقریبا همه شون برد باشن. با اجرای کد HDBACAN.py میتونید اون پارارمتر آخر رو مقداری تغییر بدید و خروجی ارز ها رو بذارید کنار اون شکلهای خروجی Kmeans و شاهد نتایج جالبی باشید:)

WIN CHFJPY 77.77777777777777%
LOSS NZDJPY 78.0701754385965%
LOSS GBPJPY 81.81818181818181%
LOSS EURCHF 79.59183673469387%
LOSS EURJPY 82.85714285714286%
WIN EURJPY 83.33333333333333%
LOSS EURNZD 80.95238095238095% 

نتیجه اینکه تنها ارزی که توش یک کلاستری پیدا میشه که توش اکثریت اعضا یک چیز باشن EURJPY هست.

خب این خروجی شاید الان برای شما هیچ حسی رو نداشته باشه چون با مقدار داده کمی روبرو هستید. ولی چون من خروجی های بلند مدت رو تست کردم واقعا میتونم بگم این خروجی خیلی حیرت انگیز هست. در نهایت EURJPY تنها ارزی هست که فعلا میشه ازش استفاده کرد. اگر من برگردم به عقب و بخوام از دوباره تعریف اون خط ها رو عوض کنم و نوع استراتژی رو تغییر بدم و... خب این خروجی هم یه چیز دیگه هست طبیعتا. ولی من فعلا تنها و تنها میتونم به کلاسیفایر EURJPY اعتماد کنم.


۴- فوکوس روی مدل و ارز منتخب و مرور یه پیش بینی در عمل

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

در کل من همه تلاشم رو کردم که تو این بازار زنده بمونم و کم خطا کنم. شاید مهمترین چیز تو فارکس همین باشه که زنده بمون بقیه اش درست میشه. از طرفی برای مانی منجمت درست حسابی شما باید با یه روشی بیشترین احتمال باخت پشت هم رو هم با maximum likelihood یا هر روش ابتکاری دیگه در بیاری و ... که دیگه در حوصله این پست نمیگنجه. فقط بعد از اینکه نتایج رو دیدیم به این نکته مدیریت پول برمیگردم.

خروجی ها با پارامتر های مختلف رو میتونید خودتون با اجرای dt_classifirs.py تست کنید. خصوصا با مقداری که به analyze پاس میدید که دیفالت رو ۸۰ هست و میگه دقت کلی کلاسیفایر چند باشه تا شروع کنه به پیش بینی آینده و مقدار بسیار مهم probability که از کلاسیفایر موقع پیش بینی میپرسه چقدر مطمئنی به این طبقه بندی ات؟

در نهایت من این کانفیک رو انتخاب کردم برای تست :

probability= 91
mean(Y.tolist()) < .4
analyze(80)
length = 90

و خروجی تو بازه این شکلی میشه:

EURJPY
 82.3529411764706 14 17

۱۷ تا معامله رو گفته اقدام بشه که در نهایت ۱۴ تاش درست بودن. خب داده های هیستوریکال این مدل نشون داده که برای این ارز با در نظر گرفتن همه این دنگ و فنگ ها خروجی های خیلی خوبی میشه گرفت و اینجا هم در فاصله دو سه هفته ای از ابتدای ۲۰۱۹ که خیلی خوب ظاهر شده. نکته ای که هست اینه که من تو مانی منجمنت به این نتیجه رسیده بودم که اگر پوینت هایی که تو یه معامله میگیرم زیر ۳۰۰ تا باشه اون معامله غیر فعال میشه. این باعث میشه که من چند معامله آخر رو اصلا واردش نشم. خب با توجه به همه این نکات من اگر وارد پوینت شماری میشدم تو این روز کولاک میکردم و پول در گردشم رشد عالی رو داشت. البته حواسمون به اینکه اینها همزمان هستن و نمیشه با هم گرفت شون مگر تا یه حد مشخصی هم باید باشه.

یه سری ستون ها رو برای اینکه عکس بهتر بشه hide کردم. فایل اصلی رو اینجا ببینید.
یه سری ستون ها رو برای اینکه عکس بهتر بشه hide کردم. فایل اصلی رو اینجا ببینید.


به این فایل خروجی که با دقت نگاه کنید شاید یه نکته زیبای نهفته توش پی ببرید. خیلی نمیخوام درباره شون حرف بزنم ولی معامله های درخشانی از جنس آپشن این وسط هست که حیرت انگیز هستن. من رو آپشن تازه شروع به کار کردم ولی خب بنظر میرسه این تیکه خیلی مغفول مونده تو کارای موجود. شاید هم چون میشه روش کارای خوبی کرد کسی چیزی نمینویسه و فقط عمل میکنن!

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

دقت کنید که وقتی من پارامتر های مدل ام رو سخت گیرانه میکردم مدل به شدت خروجی با دقت عالی میداد (در حد ۹۰- درصد دقت ولی تعداد معامله ای که میده یک پنجم میزان فعلی هست) که خب من چون میخواستم بشه خروجی های بیشتری رو چک کرد فعلا دقت اش رو کم کردم که تو دمو بشه تست اش کرد. در نظر داشته باشید که چند صد asset برای معامله داریم که این کارایی که اینجا درباره شون گفتم رو همشون قابل اجرا هست و بالاخره پنج تا چیز میشه گیر اورد برای اینکه سود خوبی از معامله های با دقت بالا درست پیش بینی شده به دست آورد.

من طبق معمول تا حد ممکن سعی کردم موارد رو به ساده ترین حالت ممکن بگم و از قهرمان بازی پرهیز کنم.
طبیعتا یک سری کارای دیگه هم کردم که اینجا فرصت نشد حرف بزنیم که در فرصت های بعد مینویسم. مثلا من یک کلاسیفایر دیگه درست کردم که بعد از اینکه پیش بینی میکنم فلان پوزیشن رو بگیر یک بار دیگه هنگام ورود به معامله با توجه به اینکه چند ساعت فاصله ممکن هست وجود داشته باشه خیلی اپدیت تر و با روش دیگه ای دابل چک میکنه شرایط رو و اکی میده یا اینکه نظر اولیه رو نقض میکنه. کدها رو هم سعی کردم خوانا باشه برای کسی که چندان آشنا نیست با موضوعات. اگر جایی ابهامی هست یا سوالی داشتید تو کامنت ها بگید که به متن اصلی اضافه بشه. ممنونم ازتون که خوندید و ممنونم از اینکه فیدبک میدید :)

پی نوشت:

۱- گویا لینکهایی که تو کپشن عکس ها ایجاد کردم تو ویرگول درست کار نمیکنن و کدها هم درست نمایش داده نشدن. لینک های عکس ها برمیگشتن به مدیای اکانت توییترم که روال این کار رو اونجا در مورد اش نوشتم.

۲- من حدود ۱۸ ماه بعد از این مطلب هم این پروژه رو در اوقات خالی ادامه دادم. به نظرم نتیجه اش چندان مطلوب نبود که در واقعیت هم تستش کنم و ببینم چجوری عمل میکنه.