هناك العديد من البرامج لتحليل وإدارة محافظ الخيارات. هم في محطات التداول ، في شكل منتجات أو خدمات تجارية منفصلة على المواقع. تحتوي هذه البرامج على عدد من القيود: ترتبط المحافظ بمنصة تداول ، ويتم ضخ عروض الأسعار من مصدر معين ، ولا يمكن حساب المعلمات أو السيناريوهات إلا باستخدام البرامج المتوفرة.
لقد قمت بحل مهمة إدارة المحافظ في الأسواق المختلفة باستخدام 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) شفرة المصدر على جيثب .