[Blotter-commits] r720 - pkg/FinancialInstrument/sandbox
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Mon Aug 8 22:53:03 CEST 2011
Author: braverock
Date: 2011-08-08 22:53:03 +0200 (Mon, 08 Aug 2011)
New Revision: 720
Added:
pkg/FinancialInstrument/sandbox/continuousSeries.R
Log:
- generalized continuous series creator prototype contributed by Ilya Kipnis <ilya<dot>kipnis<at>gmail<dot>com>
Added: pkg/FinancialInstrument/sandbox/continuousSeries.R
===================================================================
--- pkg/FinancialInstrument/sandbox/continuousSeries.R (rev 0)
+++ pkg/FinancialInstrument/sandbox/continuousSeries.R 2011-08-08 20:53:03 UTC (rev 720)
@@ -0,0 +1,114 @@
+
+
+#' continuous series
+#' @param data
+#' @param file
+#' @param dirPath
+#' @param extension
+#' @param separator
+#' @param outputFile
+#' @param rollMethod
+#' @param bindMethod
+#' @author Ilya Kipnis <ilya<dot>kipnis<at>gmail<dot>com>
+#' @export
+continuousSeries<-function(data=NULL,file=NULL,dirPath=NULL,extension=".csv",separator=",",outputFile=NULL,rollMethod="OICross",bindMethod="splooth"){
+
+ if(!is.null(data)) { #works differently depending on input
+ Data<-data
+ } else if(!is.null(file)) {
+ Data<-read.csv(file,header=TRUE,stringsAsFactors=FALSE,sep=separator)
+ } else if(!is.null(dirPath) & !is.null(extension)){ #needs an extension of your filetype, defaults to csv, but can also be ".txt" or whatever else you have read into R before.
+ setwd(dirPath) #not sure if xls works--if you're working with spreadsheets, I recommend saving your files to csv types.
+ directory<-list.files(getwd(),pattern=extension)
+ Data<-NULL
+ for(i in 1:length(directory)){
+ workingFile<-read.table(directory[i],header=TRUE,stringsAsFactors=FALSE,sep=separator)
+ Data<-rbind(Data,workingFile)
+ }
+ } else {
+ stop("you must either pass a data.frame as the 'data' parameter, the 'file' parameter, or the directory with its extension")
+ }
+
+ #Data<-read.csv("CLseries2011.csv",stringsAsFactors=FALSE,header=TRUE)
+ #Data<-Data[-which(Data$Qualifiers=="No Trades"),]
+ Data<-Data[which(Data$Open.Interest>0),] #don't need the No Trades since these filters takes care of it
+ Data<-Data[which(Data$Volume>0),]
+
+ completeFrame<-NULL
+ Data<-split(Data,Data$X.RIC)
+ for(i in 1:(length(Data)-1)){
+ #print(i)
+ monthOne<-Data[[i]]
+ monthTwo<-Data[[i+1]]
+ monthOne<-monthOne[which(monthOne$Date.L.%in%monthTwo$Date.L.),] #grab month i and the next month, get their common dates
+ monthTwo<-monthTwo[which(monthTwo$Date.L.%in%monthOne$Date.L.),]
+ monthOne$trailMonthLast<-monthTwo$Last
+
+ if(rollMethod=="OICross"){
+ rollVec<-which(monthTwo$Open.Interest>monthOne$Open.Interest) #set the roll day to be the desired cross which occurs no earlier than 10 days before expiry
+ rollVec<-rollVec[which(rollVec>=(nrow(monthOne)-10))]
+ rollDay<-rollVec[1]
+ } else if(rollMethod=="VCross"){
+ rollVec<-which(monthTwo$Volume>monthOne$Volume)
+ rollVec<-rollVec[which(rollVec>=(nrow(monthOne)-10))]
+ rollDay<-rollVec[1]
+ } else {
+ rollDay<-(nrow(monthOne)-5) #or if the roll date isn't specified by a certain metric cross, just have it be 5 days before expiry
+ }
+
+ if(is.na(rollDay)){ #if a cross method is chosen and the cross hasn't occured yet, set it to be the last day of the series
+ rollDay<-(nrow(monthOne))
+ }
+
+ monthOne<-monthOne[1:rollDay,]
+
+ if(i>1){
+ removeDates<-which(monthOne[,which(substr(colnames(monthOne),1,4)=="Date")] %in% completeFrame[,which(substr(colnames(monthOne),1,4)=="Date")]) #remove days that have already been accounted for earlier
+ monthOne<-monthOne[-(removeDates[1]:removeDates[length(removeDates)]),]
+ }
+
+ if(nrow(monthOne)>0){ #make sure that there's data left to bind or do calculations on
+ if(bindMethod=="splooth"){
+ closeGap<-monthOne$trailMonthLast[nrow(monthOne)]-monthOne$Last[nrow(monthOne)] #splooth a bunch of things for the closeGap (difference in close prices on roll day between front month and next month)
+ #print(closeGap)
+ monthOne$Adj.Open<-monthOne$Open+closeGap
+ monthOne$Adj.High<-monthOne$High+closeGap
+ monthOne$Adj.Low<-monthOne$Low+closeGap
+ monthOne$Adj.Last<-monthOne$Last+closeGap
+ monthOne$Adj.Settle<-monthOne$Settle+closeGap
+ monthOne$Adj.trailMonthLast<-monthOne$trailMonthLast
+ completeFrame$Adj.Open<-completeFrame$Open+closeGap
+ completeFrame$Adj.High<-completeFrame$High+closeGap
+ completeFrame$Adj.Low<-completeFrame$Low+closeGap
+ completeFrame$Adj.Last<-completeFrame$Last+closeGap
+ completeFrame$Adj.Settle<-completeFrame$Settle+closeGap
+ completeFrame$Adj.trailMonthLast<-completeFrame$trailMonthLast+closeGap
+ completeFrame<-rbind(completeFrame,monthOne)
+ } else {
+ completeFrame<-rbind(completeFrame,monthOne)
+ }
+ }
+
+ }
+
+ if(!is.null(outputFile)){
+ write.csv(completeFrame,outputFile) #This is where I write my output.
+ } else {
+ return(completeFrame)
+ }
+
+}
+
+###############################################################################
+# R (http://r-project.org/) Instrument Class Model
+#
+# Copyright (c) 2009-2011
+# Peter Carl, Dirk Eddelbuettel, Jeffrey Ryan, Joshua Ulrich and Brian G. Peterson
+#
+# This library is distributed under the terms of the GNU Public License (GPL)
+# for full details see the file COPYING
+#
+# $Id$
+#
+###############################################################################
+
Property changes on: pkg/FinancialInstrument/sandbox/continuousSeries.R
___________________________________________________________________
Added: svn:keywords
+ Revision Id Date Author
More information about the Blotter-commits
mailing list