مشکل:
به گفته یک تریدر رتبه تریدر برای تریدر معنا ندارد. زیرا بسیار تغییر میکند.
راه حل:
براساس این منطق که اگر یک تریدر یکبار اشتباه کرد سریع در رتبه او اثر داده نشود پس می بایست معیارهای بلند مدتی در فرمول رتبه بندی اعمال شود.
فرمول فعلی:
منطق فرمول: بازه زمانی های مختلفی را در بازدهی درنظر بگیریم:
0.4 * (بازدهی سی روزه) + 0.3 * (بازدهی نود روز) + 0.2 * (بازدهی شش ماهه) + 0.1 * (بازدهی یک هفته ای) = F1
فرمول پیشنهادی منطق: فرمول درعین حالی که بلندمدت رو درنظر میگیرد باید کوتاه مدت رو هم درنظر بگیرد. بلند مدت نشانه ی آن است که چقدر این تریدر قابل اعتماد است و کوتاه مدتی نشان دهنده ی ان است که چقدر میتواند رشدی باشد. به عبارتی بیانگر سریعتر تغییرات تریدر است. چون اعتقاد داریم یک عملکرد تریدر برای همه ی شرایط و زمان های بازار مناسب نیست. پس باید سریعا بتوانیم خوب یا بد بودن تریدر را ارزیابی کنیم. پس به کوتاه مدتی نیز وزن میدهیم. اما کوتاه مدتی در مقابل بلند بمدتی وزن کمی دارد. و این یک طیف است. F1 = 1Y * 0.34 + 6M * 0.26 + 3M * 0.20 + 1M * 0.14 + 1W * 0.06 منطق: طبق فرمول RFM باید فرکانس پیام دادن نیز معیار شود. یعنی یک تریدر از چند پیامش تونسته یک درصدر موفقیتی را کسب کند. F2 = activation(Number of 1Y Closed signal) منطق: در بازار مالی درصد موفقیت تریدر مهم است زیرا نشان دهنده قدرت تحلیل اوست.
F3 = activation(win-rate)**نوشتهی ضخیم ** فرمول نهایی: F = F1 * F2 * F3
موضوع چالشی:
آیا تریدر تازه وارد باید وارد رتبه بندی شود؟ وچرا؟
اگر بله، 1.1 چقدر از زمان ورودش بگذرد که وارد رتبه بندی شود؟
در فرمول به ازای پارامترهایی که داده ندارند چه کنیم؟ مثلا اگر زمان ورود تریدر زیر 6 ماه باشد، پس بازدهی شش ماه تریدر میخوره داده موجود نیست، در ترم بازدهی 6 ماهه در فرمول آیا صفر جایگزین کنیم؟
اعمال این فرمول در کل سیستم محاسباتی و نمایش به کاربر:
این فرمول در کل ETL به عنوان فرمول مرجع پیاده سازی شود و محاسبات امتیاز نمادها از قبیل Abs Score و yx و … براساس امتیاز و رتبه بندی جدید تریدرها انجام شود.
در همه قسمت های فرانت که رتبه تریدر را به کاربر نشان می دهیم، از رتبه بندی بدست آمده از این فرمول استفاده شود (مانند کارت پیام، صفحه برترین تریدرها، صفحه تریدر یا در صفحه نماد). به عبارتی همه API هایی که رتبه تریدر را از بک اند برمیگرداند به این فرمول تصحیح شود.
آیا مناسب نیست مانند عملکرد یک نفر را از روزی که اطلاعاتش را داریم، محاسبه کنیم؟ مثلاً وقتی یک رستوران وارد اسنپفود میشود امتیازش از روزی که وارد شده است مؤثر است. پس پیشفرض زمان شروع محاسبه عملکرد را بگذاریم از بدو تولد.
همچنین مانند eToro اگر طرف خودش رسماً سیگنالش را نبسته است، ما هم نبندیم.
کلا در سهمتو از تخمین باید کم کم فاصله گرفت.
الآن که فکر میکنم میبینم این فرمول پیشنهادی یک خوبی مهم دارد. از دید ما تحلیلگر خوب کسی است که مستمرا پیشنهادهای خوب برای سرمایهگذاری داشته باشد. نمی شود دو سال پیش یک سهام خوب معرفی کرده باشد و رفته باشد. این برداشت درست است؟
در اسنپ فود پارامتر زمان در محاسبه امتیاز تاثیر ندارد. صرفا تعداد نظرات و عدد 1 تا 5 هر نظر تاثیر دارد. پس فرق می کند با ما که زمان را دخیل می کنیم. پس سوال این میشود: آیا عملکرد یک تریدر را در یک بازه زمانی بسنجیم یا خیر؟
چون ماهیت بازدهی در بازه زمانی تعریف میشود مجبوریم بازه زمان را دخیل کنیم. پس برای اینکه مقایسه بین تریدرها منصفانه باشد باید در یک بازه زمانی خاص از بازار باهم مقایسه کنیم. مثلا مقایسه بازدهی تریدری که زمان ریزش 99 بورس را دیده با تریدری که در ان بازه رکوردی ندارد منصفانه نیست.
الآن که فکر میکنم میبینم این فرمول پیشنهادی یک خوبی مهم دارد. از دید ما تحلیلگر خوب کسی است که مستمرا پیشنهادهای خوب برای سرمایهگذاری داشته باشد. نمی شود دو سال پیش یک سهام خوب معرفی کرده باشد و رفته باشد. این برداشت درست است؟
بله درست است. به دنبال 3 پارامتر هستیم Recency Frequency Monitization
همچنین مانند eToro اگر طرف خودش رسماً سیگنالش را نبسته است، ما هم نبندیم.
کلا در سهمتو از تخمین باید کم کم فاصله گرفت.
این مثال را چگونه حل میکنید؟ یک کانال تلگرام هست که اسمش اینه: سیگنال های روزانه و نوسان گیری. این کانال این طور سیگنال می دهد: امروز شستا رو بخرید. خروج هم نمیدهد پون در توضیحات کانالش نوشته است “روزانه”. نظر شما این است که این سیگنال باز بمونه حتی تا 2 سال؟
ادعا این است که هر سیگنالی که صادر میشود یک بازه اعتبار دارد چه کم چه خیلی زیاد. مثلا اگر نموداری که تریدر کشیده و گفته فلان نماد میره بالا با تایم فریم 1 ثانیه باشد و بعد تریدر سیگنال خروج نداد، ما هم نمیتوانیم سیگنالش را نبندیم زیرا اعتبار تحلیل این تریدر نهایتا تا چند صد ثانیه دیگر است. چه به نفع تریدر تمام شود چه به ضرر تریدر تمام شود!
پس ما تصمیم گرفتیم برای خروج یک پیش فرضی را داشته باشیم و با توجه به مشخصات هر تریدر تنظیم کنیم این را.
و همچنین این قایلیت را برای تریدرهای احراز هویت شده قرار داده ایم که خودش این پیش فرض را تنظیم کند. یعنی تریدرهای تیک آبی دارد الان میتوانند به سهمتو بگویند که تازمانی که ما سیگنال خروج نداده ایم شما هم نبند.
این پیش فرض کاملا شفاف در پیج تریدر گفته شده و تریدر میتواند درخواست ویرایش دهد:
با کلیت فرمول اوکی هستم
ولی اینکه ضرایب بازدهی ها از کوتاه مدت به بلند مدت باید صعودی باشه رو شک دارم که درسته یا نه، چون recency هم مهمه.
در مورد اینکه همه تریدر ها ربته بندی شوند هم به نظرم اره بشوند، یه نفر که تا الان فعالیتی توی سهتمو نداشته امتیاز نزدیک صفر میگیره و بر اساس اون امتیاز ربته میگیره
در مورد داده هایی که موجود نیست هم صفر بذاریم به نظرم
تأثیرش این طوری است که اگر کسی زودتر آمده باشد و امتیاز بالایی گرفته باشد، آدمهای بیشتری از وی خرید میکنند، امتیاز بیشتری میگیرد و flywheel اش شتابان جلو میرود. اگر کسی دیرتر آمده باشد، از آن عقبتر است و طول میکشد تا به وی برسد ولو امتیازش بالا باشد.
اگر قرائنی مثل آنهایی که ذکر کردید موجود باشد و شما متوجه شوید این طرف سیگنالش برای بازهی زمانی مشخصی است، حرف شما معنا پیدا میکند ولی اگر قرینهای نیست. مثلاً طرف چند سال پیش سهام تسلا را خریده و تا امروز نگه داشته است، نمیتوانید سیگنال را بسته شده بدانید. میتوانید در ارزیابی پایینتر قرارش دهید چون مثلاً سیگنال نداده است ولی بازدهش را نباید بر اساس تخمین زمان بسته شدن سیگنال محاسبه کنید.
درست است. اما همچنان گفته بنده را نقض نکرده اید. من گفته ام زمان در محاسبه امتیاز تاثیر ندارد. به عبارتی دیگه فرمولی که براساس نظرات مردم، امتیاز صادر میکند به زمان ربطی ندارد ولی تعداد نظرات مردم به زمان ربط داره یعنی هرچه رستوران زودتر اومده باشه تعداد نظرات بیشتری جمع میکنه. ولی اینکه از روی n نظر جمعبندی امتیاز چی باشه متغیر با زمان نیست.
اما در کار ما خود جمع بندی امتیاز هم متغیر با زمانه یعنی بازدهی در یک دوره ی زمانی معنا داره درصورتی که در اسنپ جمع بندی به تعداد نظرات بستگی داره.
اگر قرائنی مثل آنهایی که ذکر کردید موجود باشد
پس برای تریدرهایی که حس کرده ایم سیگنال هایش برای بازه زمانی مشخصی هست، هم نظر هستیم.
برای تریدرهایی که هیچ قرائنی در دست نداریم. بله سیگنالش را نباید ببندیم.
نکته اینجاس که recency اتوماتیک درنظر گرفته میشود. اگر تریدری امروز سیگنال بدهد و همین امروز هم تریدش بسته شود و سود زیادی کرده باشد در بازدهی یکساله خودش را نشان می دهد. در بازدهی 6 ماه ، 3 ماهه و 1 ماهه و یک هفته نیز خودش را نشان می دهد.
در مورد اینکه همه تریدر ها ربته بندی شوند
خیلی هم نظر نیستم. امتیاز صفر یک معنا بیشتر ندارد. امتیاز صفر یعنی ترید کرده است و نه سود و نه ضرر کرده است. اگر دو نفر را با هم داریم مقایسه میکنیم بر یک مبنا نباید این مبنای مقایسه چند معنا دهد. پس اگر به تریدری که داده ای ازش نداریم امتیاز صفر بدهیم مقایسه درستی انجام نداده ایم. بلکه تریدری که داده نداریم رو نباید در رنکینگ بیاریم بلکه باید بگیم داده ای نداریم.
مثلا تریدرهای ما از زمان شروع فعالیت 1 ماه کار کنند تا در رتبه بندی وارد شوند.
خود پاس کردن شرایط وارد شدن به رتبه بندی میتواند یک مشوق یا یک اعتبار برای تریدر باشد.
البته میتوانیم در پنل خصوصی تریدر بش بگیم اگه الان رتبه میگرفتی مثلا رتبه ت میشد 1000 اما به صورت عمومی نباید نشان بدیم چون کاربران قدرت تشخیص ندارند که این تریدر تازه است. مگر انکه تگ تازه وارد بزنیم.
به صورت غیر مستقیم زمان ورود مؤثر میشود. مشتری به رستوران قدیمی اطمینان بیشتری دارد تا رستوران تازه تأسیس. به تحلیلگر با سابقه، پزشک با سابقه و غیره هم همین طور. بحث بر سر این است طول سابقه مهم است.
در ادبیات مالی شاخص هایی وجود دارد. که بیان می کند چقدر تریدر بیشتر از صندوق درامد ثابت سود کرده به صورت نرمال شده (یعنی تقسیم بر ریسک). مانند:
1.Sharp ratio : میانگین بازدهی ماهانه منهای درامد ثابت تقسیم بر واریانس تغییرات ارزش پرتفو
2. Alpha ratio
3. Teynor ratio : نرمالایز شده با بازار است. تفاوت این نسبت با Sharp اینه که در مخرج بجای واریانس از ضریب بتا استفاده میکند.
4. Sortino ratio : استفاده از واریانس یک طرف منفی بجای واریانس
5. Calmar ratio : استفاده از max drawdown بجای واریانس
درصد موفقیت برای مدل های ریسکی متفاوت متفاوت است.
حدها: زیر 20 درصد قابل قبول نیست و بالای 50درصد خوبه
3. زمان عضویت تریدر
حدها: بعد از 6 ماه دیگر تریدر تازه وارد حساب نمی شود.
4. تعداد پیام های تریدر در بازه زمان
حد ها: در مدت یکسال 200 پیام مناسب است یعنی تقریبا 3.8 پیام در هر هفته
اگر تعداد پیام های تریدر را در پنجره زمانی کوتاه مثلا 3 ماهه ببینیم میتواند همزمان نشان دهنده تازگی پیام ها نیز باشد
حد ها: در این حالت در مدت 90 روز 45 پیام مناسب است.
5. تازگی پیام های تریدر
مدت زمانی که از آخرین سیگنال تریدر می گذرد
حد ها: زیر 6 روز یعنی تازه، زیر 30 روز یعنی با شیب بالا از تازگی کم می شود، زیر 90 روز یعنی قدیمی که با شیب کمی قدیمی می شود و بیشتر از 90 روز تقریبا می شود خیلی قدیمی
برای رسیدن به یک امتیازدهی مناسب تریدرها لازم است به چند موضوع رسیدگی شود:
پیشنهاد معماری ETL محاسبات امتیاز تریدر به این صورت است: @AliTaba
1.1. مقادیر پایه ای می بایست با یک یا چند Task محاسبه شوند و در دیتابیس ذخیره شوند. این مقادیر شامل بازدهی های تریدر (1D, 30D, 90D, …) و efficiency هر سیگنال است.
2.1. مقادیر لایه بالاتر که در محاسبه آن شاید از مقادیر پایه ای استفاده شود می بایست با یک Task حساب شوند.
3.1. برای محاسبه این مقادیر، چون سرعت خیلی مهم است پس با استفاده با استفاده از یک query بهینه داده ها لود شود و اگر نیاز به محاسبات بعد از لود شدن است به صورت بهینه انجام گیرد و سپس ذخیره شود.
برای درست محاسبه شدن نسبت های risk2reward از قبیل (sharpe یا sortino یا …) لازم است بازدهی 30روز تریدرها در کل بازه زمانی آن 1. به درستی محاسبه شود (یعنی خطای محاسباتی نداشته باشد) 2. از محاسبه شدن آن در هر روز اطمینان داشته باشیم. @MSaeidSedighi
برای درست محاسبه شدن درصد موفقیت، نیاز است مقدار efficiency ثبت شده در سیگنال ها : 1. به درستی محاسبه شود (یعنی خطای محاسباتی نداشته باشد) 2. از محاسبه شدن آن به ازای هر سیگنال اطمینان داشته باشیم. @MSaeidSedighi
باید مطمئن شد که Task اجرا شده برای محاسبه مقادیر لایه بالا حتما بعد محاسبه مقادیر لایه پایه ای است. و از محاسبه شدن آن مطمئن شد. @mohammadch
از زمانی که تریدری عضو سهمتو شده تا زمانی که اولین سیگنال خرید ش را می دهد همه مقادیر بازدهی شامل 1D، 30D، 90D و … باید NULL باشد. به محضی که اولین سیگنالش ثبت می شود.بازدهی ها مقدار می گیرند و بعد از آن باید هر وقت دوره ای بوجود آمد که تریدر در آن سیگنالی نداده بازدهی ها 0 شوند نه اینکه NULL شوند. @mohammadch
نیاز است یک monitoring و alarming روی کل ETL امتیازدهی داشته باشیم که اگر Taskی اجرا نشد یا Fail شد بلافاصله از آن خبر دار شویم. @mohammadch
حالت های NULL یا صفر یا بی معنی بودن: @mohammadch درصد موفقیت:
7.1. اگر تریدر هیچ سیگنالی نداشته باشه که سودآور باشه (+ بسته شده باشه) در این حالت winrate باید ۰ شود که مشکلی نیست.
7.2. اگر سیگنالی نداشته باشه مخرج 0 می شود که winrate مقدارش NULL می شود. Sharpe ratio
7.3. اگر صورت صفر شود که کل نسبت صفر می شود و مشکلی نیست
7.4. اگر مخرج صفر شود که یعنی یا تعداد بازدهی ماهانه نامساوی کمتر از 2 است یا مقادیر بازدهی مساوی است (که این حالت دوم تقریبا محال است مگر هردو مساوی 0 باشد) در این حالت sharpe ratio مقدارش NULL میشود. Sortino ratio
7.5. اگر صورت صفر شود که کل نسبت صفر می شود و مشکلی نیست
7.6. اگر مخرج صفر شود که یعنی یا تعداد بازدهی های منفی ماهانه نامساوی کمتر از 2 است یا مقادیر بازدهی های منفی مساوی است در این حالت Sortino ratio مقدارش NULL میشود.
7.7 در حالتی که Sharpe ratio مقدار NULL دارد حتما مقدار Sortino ratio نیز باید برابر NULL باشد.
اگر امتیاز تریدری NULL باشد باید علت NULL شدن را در صفحه تریدر توضیح دهیم. @ehsaneona
برای اینکه مطمئن باشیم پرفورمنس تریدر حتما درست است نیازه که بتونیم برای یک سال گذشته تسک های مربوط به پرفورمنس رو با سرعت خوبی حساب بکنیم.
برای شروع تسک daily change portfolio رو من دارم سرعت اجرا اش رو زیاد میکنم و تسک performance رو سعید روی سرعت اجراش کار میکنه. @MSaeidSedighi@hamidrexa
دو تا عبارت مختلف در DB دیده ام که یکی هستند: change portfolio و performance .
اگر مفهوم مجزایی نیست پس اتفاق خوبی نیست. لطفا یکی شوند. در این صورت یک نفر کافیست روی موضوع کار کند.
در حال حاضر برای محاسبه sharpe ratio و دیگر معیارهای اندازهگیری ریسک، از دادههای ۲۱م هر ماه میلادی استفاده میکنیم. که باعث میشه این مقادیر در طول یک ماه ثابت باشند.
برای افزایش دقت score، بهتره که در هر روز که score محاسبه میشه، این معیارها نیز آپدیت بشن. (مستقل از اینکه ۲۱ ماه هست یا نه) برای این کار باید با شروع از همون روز، ۳۰ روز، ۳۰ روز عقب بریم و از بازدهیهای ۳۰ روزه استفاده کنیم.
هم من و هم محمد چراغی تغییراتی که داریم میدیم از دیتای assetSignal, assetOrder استفاده میکنیم که فقط دیتای یک سال پیش ازش موجود هست و باید تسک های assetSignal, assetOrder رو بزنم که اجرا بشه و دیتامون کامل بشه
من این تسک ها رو اجرا میکنم تا بتونم تسک خودم رو که زدم اجرا کنم
مشکلی در محاسبه امتیاز تریدر وجو دارد: چون نسبت شارپ عددی بین -∞ و +∞ هست و بقیه پارامترها بین 0 تا 1 هست پس مثلا اگر تریدر الف با شارپ -2 و تریدر ب با شارپ -3 باشد پس ب از الف بدتر است ولی اگر پارامتر دیگری مثل زمان ورود الف 1 و ب 0.5 باشد انگه با ضرب کردن امتیاز این طور بدست می آید: الف: -2 و ب:-1.5 پس یعنی الف بدتر از ب است که اشتباه است.