[Blotter-commits] r821 - pkg/FinancialInstrument/sandbox

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Tue Oct 18 04:25:15 CEST 2011


Author: peter_carl
Date: 2011-10-18 04:25:08 +0200 (Tue, 18 Oct 2011)
New Revision: 821

Added:
   pkg/FinancialInstrument/sandbox/parse.Morningstar.R
Log:
- parser for data from spreadsheets populated by Morningstar Direct API


Added: pkg/FinancialInstrument/sandbox/parse.Morningstar.R
===================================================================
--- pkg/FinancialInstrument/sandbox/parse.Morningstar.R	                        (rev 0)
+++ pkg/FinancialInstrument/sandbox/parse.Morningstar.R	2011-10-18 02:25:08 UTC (rev 821)
@@ -0,0 +1,101 @@
+### Parse Morningstar spreadsheets
+
+# This is a parser for a spreadsheet distributed by Morningstar for their 
+# Morningstar Direct product.  The spreadsheet includes a method for downloading
+# historical data, whether daily, weekly, or monthly.  
+
+# The function is designed to read in the spreadsheet and parse the columns into
+# either separate columns, which it stores as instruments, or as a block, which
+# it passes back to be assigned.  
+
+# The "peers" method is for importing returns reported for hedge funds or other
+# fund types, typically for use with PerformanceAnalytics.  
+
+# The "instruments" method is for importing returns for a list of indexes, which
+# are converted go CR objects ( Close, Return), stored in the specified directory, 
+# and registered as instruments using FinancialInstrument.
+
+## Load packages
+parse.Morningstar <- function (filename, make.instruments=FALSE, filesroot = "~/Data/Morningstar", sheetname = "Calendar Return", symbol.row=c("Symbol", "SecID", "ISIN", "CUSIP", "Name")) {
+  require(PerformanceAnalytics)
+  require(gdata)
+  require(quantmod)
+
+  symbol.row = symbol.row[1]
+
+  x = read.xls(filename, sheet=sheetname, check.names=FALSE, stringsAsFactors=FALSE, header=FALSE, strip.white=TRUE)
+  ISOdates = as.Date(as.yearmon(x[-1:-7,1], format="%m/%Y"), frac=1)
+  x.xts = as.xts(data.matrix(x[-1:-7,-1])/100, order.by=ISOdates)
+  # mangles ampersands when read in, so fix them in colnames
+  x.colnames=gsub("amp;", "", x[7, -1],fixed=TRUE)
+  colnames(x.xts)=x.colnames
+  
+  if(!make.instruments) # just return the object to the work space
+    return(x.xts)
+  else{
+    # Parse and create individual instruments with FI
+    
+    # Set the working directory to the folder that contains
+    # the resulting data.
+    setwd(filesroot)
+    
+    # Create symbol names
+    # Identify which row to use for symbol name
+    row = grep(symbol.row, x[3:7,1], value=FALSE) + 2
+    symbolNames = x[row,-1]
+    if (any(symbolNames=="")){
+      warning(paste("The '", symbol.row, "' field has missing values.  Falling back to use 'SecId' instead.", sep=""), immediate.=TRUE)
+      symbolNames = x[3,-1]
+    }
+    
+    for(i in 1:length(symbolNames)) {
+      # check to make sure directories exist for each symbol
+      dir.create(paste(filesroot, symbolNames[i], sep="/"), showWarnings = FALSE, 
+      recursive = FALSE, mode = "0777")
+    }
+    
+    # Parse the columns into individual return objects
+    print("Processing columns as symbols...")
+    for( i in 1:dim(x.xts)[2]){
+      # Column
+      tmp = x.xts[,i]
+      # Create an index from the returns
+      tmp.desc = colnames(tmp)
+      colnames(tmp)="Returns"
+      xtsAttributes(tmp) <- list(Description = tmp.desc)
+      save(tmp, file=paste(filesroot, symbolNames[i], paste(symbolNames[i], ".rda", sep=""), sep="/"))
+      print(paste(symbolNames[i],", ", tmp.desc, sep=""))
+      instrument(symbolNames[i], currency="USD", multiplier=1, tick_size=.0001, start_date=head(na.omit(index(tmp)),1), description=tmp.desc, data="R", source="Morningstar", assign_i=TRUE)
+    }
+    
+    # Now, whenever you log in you need to register the instruments.  This
+    # might be a line you put into .Rprofile so that it happens automatically:
+    # require(quantmod) # this requires a development build after revision 560 or so.
+    setSymbolLookup.FI(base_dir=filesroot, split_method='common')
+    print( "Now, whenever you log in you need to register the instruments.  This")
+    print( "might be a line you put into .Rprofile so that it happens automatically:")
+    print( "> require(quantmod) # this requires a dev build after revision 560 or so.")
+    print( paste("> setSymbolLookup.FI(base_dir=",filesroot,", split_method='common')"))
+    print( "Now you should be able to use getSymbols to retrieve your data.")
+  
+  }
+}
+# Now you should be able to:
+# getSymbols("FOUSA08MS7")
+# or whatever...
+# attr(FOUSA08MS7, "Description")
+# 
+# charts.PerformanceSummary(FOUSA08MS7, ylog=TRUE, wealth.index=TRUE, main = attr(FOUSA08MS7, "Description"))
+# tail(FOUSA08MS7)
+
+# symbolNames
+# [1] "SecId"      "FOUSA08MS7" "FOUSA08MS6" "FOUSA08MS8"
+# Unfortunately, these are the identifiers for the S&P GSCI Reduced Energy Index
+
+# > attr(FOUSA08MS6, "Description")
+# [1] "S&P GSCI Reduced Energy Spot"
+# > attr(FOUSA08MS8, "Description")
+# [1] "S&P GSCI Reduced Energy TR"
+# > attr(FOUSA08MS7, "Description")
+# [1] "S&P GSCI Reduced Energy Excess Return"
+# > roll.R=FOUSA08MS7-FOUSA08MS6


Property changes on: pkg/FinancialInstrument/sandbox/parse.Morningstar.R
___________________________________________________________________
Added: svn:keywords
   + Revision Id Date Author



More information about the Blotter-commits mailing list