R中的投资组合管理

有许多用于分析和管理期权投资组合的程序。 它们以交易现场的形式提供单独的商业产品或服务。 这样的程序有很多限制:投资组合绑定到交易平台,报价是从特定来源抽取的,参数或方案只能使用提供的软件来计算。


我使用R解决了在不同市场中管理投资组合的任务。开源引擎提供了许多可能性:投资组合存储在任何DBMS或Excel中,或从终端下载(QUIK,TWS,以及任何其他具有API的应用); 报价从其来源(终端,数据库或网站)中抽出,任何投资组合分析均可用!


一般说明


市场数据和投资组合被加载到OptPortOptMarket对象中。 根据市场对投资组合进行重估,基于这些数据,计算当前利润​​和“希腊人”及其配置文件。 计算投资组合资料(利润或“希腊人”对基础资产价格的依赖),并将其存储在OptProfile类的对象中。 内置功能绘制轮廓图,并允许您比较多个投资组合的轮廓。


通过文章末尾的链接(1)-管理与QUIK和Access连接的Mosbirzhy期权组合的选项。


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函数计算投资组合参数-未实现的收益和“希腊人”。 结果存储在OptPort对象的total_value字段中。


 port = PortValuation(port) port$total_value 

投资组合资料-OptProfile


OptProfile对象将投资组合配置文件存储在基础资产的价格范围内。


PlotProfile函数基于PlotProfile构建轮廓图。


 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) GitHub上的源代码

Source: https://habr.com/ru/post/zh-CN484358/


All Articles