کاربرد LP در برنامهریزی پورتفو
تخصیص دارایی به فرآیند تعیین نحوه توزیع سرمایههای سرمایهگذاری بین انواع کلاسهای دارایی مانند سهام، اوراق قرضه، صندوقهای مشترک، املاک و مستغلات و نقدینگی اشاره دارد. مدلهای پورتفو برای تعیین درصد سرمایهگذاری در هر کلاس دارایی استفاده میشوند. هدف، ایجاد پورتفویی است که بهترین تعادل بین ریسک و بازده را فراهم کند.
در مدلسازی پورتفو از روشهای متنوعی بهره گرفته میشود که هر یک ویژگیهای خاصی دارند:
- مدل میانگین‑واریانس مارکویتز برای بهینهسازی تعادل ریسک‑بازده بر پایهٔ واریانس به عنوان معیار ریسک استفاده میشود1.
- مدل حداقل واریانس که هدف آن کاهش بیشینهٔ واریانس سبد سرمایهگذاری است.
- مدل حداقل ارزش مشروط در معرض ریسک (\(CVaR\)3) که ریسک انتهایی سبد را به صورت انتگرال زیان بیش از \(VaR\) ارزیابی میکند2.
- مدل برنامهریزی خطی چندهدفه که امکان ترکیب معیارهای مختلف مانند بازده، ریسک، نقدینگی و هزینههای تراکنش را فراهم میسازد.
این روشها میتوانند با افزودن قیود عملیاتی نظیر محدودیتهای سرمایهگذاری در هر کلاس دارایی یا محدودیتهای نقدینگی ترکیب شوند تا مدلهای پورتفوی قابل اجرا تولید گردد.
مثال (تخصیص سرمایه)
در این بخش نشان میدهیم چگونه میتوان با استفاده از برنامهریزی خطی مدلهای بهینهسازی پورتفو را برای ترکیبی از صندوقهای مشترک توسعه داد. مدل اول برای سرمایهگذاران محافظهکار که از ریسک میپرهیزند طراحی شده است؛ مدل دوم برای سرمایهگذاران ریسکپذیرتر است.
یک شرکت سرمایهگذاری، محصولات سرمایهگذاری متنوعی مانند صندوقهای کالا، حسابهای بازنشستگی و طرحهای بازنشستگی را برای سرمایهگذاران با تحمل ریسکهای مختلف ارائه میدهد. این شرکت قصد دارد مدلی برای بهینهسازی ترکیب شش صندوق سرمایهگذاری مختلف ایجاد کند. بر اساس جدول زیر، بازده سال آینده این صندوقها در پنج سناریوی مختلف داده شده است؛ بازدهی برخی سناریوها خوب و برخی ضعیف است. مدیران پورتفو با استفاده از این سناریوها ترکیبی بهینه انتخاب میکنند. فرض بر این است که در سال آینده حتما یکی از پنج سناریو رخ خواهد داد.
| صندوق سرمایهگذاری مشترک | سناریو ۱ | سناریو ۲ | سناریو ۳ | سناریو ۴ | سناریو ۵ |
|---|---|---|---|---|---|
| صندوق سهام خارجی | 10.06 | 13.12 | 13.47 | 45.42 | -21.93 |
| صندوق اوراق قرضه میانمدت | 17.64 | 3.25 | 7.51 | -1.33 | 7.36 |
| صندوق سهام شرکتهای بزرگ (رشد) | 32.41 | 18.71 | 33.28 | 41.46 | -23.26 |
| صندوق سهام شرکتهای بزرگ (ارزش) | 32.36 | 20.61 | 12.93 | 7.06 | -5.37 |
| صندوق سهام شرکتهای کوچک (رشد) | 33.44 | 19.40 | 3.85 | 58.68 | -9.02 |
| صندوق سهام شرکتهای کوچک (ارزش) | 24.56 | 25.32 | -6.70 | 5.43 | 17.31 |
پورتفوی محافظهکارانه
از یکی از مدیران شرکت درخواست شده است تا پورتفویی برای مشتریان محافظهکار که از ریسک پرهیز دارند، توسعه دهد. وظیفه مدیر تعیین نسبت سرمایهگذاری در هر یک از شش صندوق مشترک بهگونهای است که پورتفو بهترین بازده ممکن را با کمترین ریسک ارائه دهد.
متغیرهای تصمیم را بصورت زیر درنظر میگیریم:
- \(FS\): صندوق سهام خارجی
- \(IB\): صندوق اوراق قرضه میانمدت
- \(LG\): صندوق سهام شرکتهای بزرگ (رشد)
- \(LV\): صندوق سهام شرکتهای بزرگ (ارزش)
- \(SG\): صندوق سهام شرکتهای کوچک (رشد)
- \(SV\): صندوق سهام شرکتهای کوچک (ارزش)
و مدل را بصورت زیر مینویسیم:
پاسخ
result = linprog(
[0, 0, 0, 0, 0, 0, -1],
[
[-10.06, -17.64, -32.41, -32.36, -33.44, -24.56, 1],
[-13.12, -3.25, -18.71, -20.61, -19.40, -25.32, 1],
[-13.47, -7.51, -33.28, -12.93, -3.85, 6.70, 1],
[-45.42, 1.33, -41.46, -7.06, -58.68, -5.43, 1],
[21.93, -7.36, 23.26, 5.37, 9.02, -17.31, 1],
],
[0, 0, 0, 0, 0],
[[1, 1, 1, 1, 1, 1, 0]],
[1],
)
print(result.x, -result.fun)
# [0, 0.554, 0.132, 0, 0, 0.314, 6.445] 6.445
پورتفوی ریسک متوسط
مدیر پورتفو میخواهد برای مشتریان با ریسک متوسط، پورتفویی طراحی کند که بازده سالانه آن کمتر از ۳% نشود.
به این ترتیب رابطه حداقل بازدهی را میتوان بصورت زیر نوشت:
و مدل جدید بصورت زیر بازنویسی میشود:
پاسخ
result = linprog(
[0, 0, 0, 0, 0, 0, -0.2, -0.2, -0.2, -0.2, -0.2],
[
[0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1],
],
[-3, -3, -3, -3, -3],
[
[10.06, 17.64, 32.41, 32.36, 33.44, 24.56, -1, 0, 0, 0, 0],
[13.12, 3.25, 18.71, 20.61, 19.40, 25.32, 0, -1, 0, 0, 0],
[13.47, 7.51, 33.28, 12.93, 3.85, 6.70, 0, 0, -1, 0, 0],
[45.42, -1.33, 41.46, 7.06, 58.68, -5.43, 0, 0, 0, -1, 0],
[-21.93, 7.36, 23.26, -5.37, 9.02, 17.31, 0, 0, 0, 0, -1],
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
],
[0, 0, 0, 0, 0, 1]
)
print(result.x, -result.fun)
# [0, 0, 1, 0, 0, 0, 32.41, 18.71, 33.28, 41.46, 23.26] 29.82