إدارة المحافظ في R

هناك العديد من البرامج لتحليل وإدارة محافظ الخيارات. هم في محطات التداول ، في شكل منتجات أو خدمات تجارية منفصلة على المواقع. تحتوي هذه البرامج على عدد من القيود: ترتبط المحافظ بمنصة تداول ، ويتم ضخ عروض الأسعار من مصدر معين ، ولا يمكن حساب المعلمات أو السيناريوهات إلا باستخدام البرامج المتوفرة.


لقد قمت بحل مهمة إدارة المحافظ في الأسواق المختلفة باستخدام R. يوفر محرك المصدر المفتوح العديد من الفرص: يتم تخزين المحافظ في أي DBMS أو Excel ، أو يتم تنزيلها من الجهاز (QUIK ، TWS ، أي شيء آخر باستخدام API) ؛ يتم ضخ الاقتباسات من مصدرها (المحطة ، قاعدة البيانات أو الموقع) وأي تحليلات محفظة متاح!


الوصف العام


يتم تحميل بيانات وحافظة السوق في كائنات من OptPort و OptMarket . يتم إعادة تقييم الحافظة وفقًا للسوق ، بناءً على هذه البيانات ، ويتم حساب الأرباح الحالية و "اليونانيين" ، بالإضافة إلى ملفها الشخصي. يتم حساب ملف تعريف المحفظة (اعتماد الربح أو "اليونانيين" على سعر الأصل الأساسي) وتخزينه في كائن فئة OptProfile . ترسم الوظائف المدمجة رسمًا جانبيًا للملف الشخصي وتسمح لك بمقارنة ملفات التعريف الخاصة بالعديد من المحافظ.


من خلال الرابط (1) في نهاية المقال - خيار إدارة مجموعة خيارات Mosbirzhy مع اتصال QUIK و Access.


أسعار سوق OptMarket


OptMarket وجود OptMarket فئة OptMarket لتخزين خيارات خيارات الأسهم ومعلومات حول الأصل الأساسي والتاريخ الحالي.


بدون أسعار السوق ، يتم إعادة تقييم المحفظة بقيمة حقيقية.


 #    ( )  Access brd = GetBoard_fortsdb(ul) #    OptMarket mrkt = OptMarket(ul = 'SiZ9', #    ul_price = brd$ul_price, #    board = as.tbl(brd$board), #   now = as.Date('2019-11-12')) #   

محفظة OptPort


قد تتكون المحفظة من خيارات وأصل أساسي. مصمم
يخلق محفظة تستند إلى جدول المعاملات لقاعدة معينة
الأصول. يتم تلخيص المعاملات في موقف مشترك.


 #    Access (      QUIK) trades = GetTrades_fortsdb() # ..     ,       trades = TickerToParams_fortsboard(trades, mrkt$board) 

استنادًا إلى المعاملات ، نقوم بإنشاء كائن من فئة OptPort :


 port = OptPort(ul = 'SiZ9', trades = trades, name = 'Spread') 

تحليل المحفظة


تقييم المحفظة


PortPricing بإعادة تقييم الحافظة بالأسعار الحالية - تحديد أسعار الخيارات من OptMarket إلى محفظة OptPort . بالنسبة لخيارات بورصة موسكو ، فإن أبسط شيء هو إعادة تقييمها بالسعر النظري الذي تبثه البورصة نفسها والمعروفة دائمًا ( price_at = 'theor' ).


 port = PortPricing(port, mrkt, price_at = 'theor') 

الربح و "الإغريق"


PortValuation وظيفة PortValuation معلمات الحافظة - المكاسب غير المحققة و "اليونانيين". يتم تخزين النتائج في حقل OptPort لكائن OptPort .


 port = PortValuation(port) port$total_value 

الملف الشخصي محفظة - OptProfile


يقوم كائن OptProfile بتخزين ملف تعريف الحافظة في النطاق السعري للأصل الأساسي.


تقوم وظيفة PlotProfile بإنشاء رسم بياني للملف الشخصي يستند إلى ggplot2 .


 myprofile = OptProfile(optport = port, params = c('pl', 'delta', 'theta', 'vega'), ul_range = 0.05 #         ) PlotProfile(myprofile) 


تكوين محفظة


لتغيير تكوين الحافظة هناك وظيفة AddTrades . إنها تضيف صفقة إلى المحفظة وتحسب موضع محفظة جديد.



 #   -      newtrade = data.frame(ul='SiZ9', ticker='Si63500BX9', xtype='p', strike=63500, expdate=as.Date('2019-12-19'), tradeprice=500, q=-1 ) #    port2 = AddTrades(port = port, trades = newtrade) port2$name = 'Changed' 

يمكن مقارنة ملف المحفظة الجديد مع القديم. وظيفة JoinProfiles
يجمع بين بيانات الملف الشخصي لبناء رسم بياني مشترك.


 #       port2 = port2 %>% PortPricing(., mrkt, price_at = 'theor') %>% PortValuation(.) #    myprofile2 = OptProfile(optport = port2, params = c('pl', 'delta','theta', 'vega'), ul_range = 0.05) #   profiles = JoinProfiles(list(myprofile, myprofile2)) PlotProfile(profiles) 


في المجموع


وظائف أساسية حل المشاكل الأساسية. تم تطوير الحل الخاص بي لغرض محدد - تحليل العديد من المحافظ وتغييرات النماذج في هذه الحقائب. يمكنك العثور على الكود المصدري على الرابط أدناه. مكافأة - قاعدة لاستيراد البيانات من QUIK وإعداد QUIK نفسه للتصدير.


المراجع:
(1) شفرة المصدر على جيثب .

Source: https://habr.com/ru/post/ar484358/


All Articles