[R-SIG-Finance] What are the requirements for instrument names in a blotter portfolio?

Robert Nicholson robert.nicholson at gmail.com
Mon Apr 26 15:49:55 CEST 2010


Sure here's an example

Please bear I'm in mind I'm still learning R and blotter. 

The idea is to put transaction data thru and then look at the PnL ideally for each trade

The transactions file looks like this for each row

05/30/2008, YOU BOUGHT           OPENING TRANSACTION, -24702R9GE, CALL (DLQ) DELL INC JUL 25 (100 SHS),Cash,10,0.35,17.5,,,-367.5, 06/02/2008
06/12/2008, YOU SOLD             CLOSING TRANSACTION, -24702R9GE, CALL (DLQ) DELL INC JUL 25 (100 SHS),Cash,-10,0.56,18.45,,,541.54, 06/13/2008

library(quantmod)
library(blotter)
library(PerformanceAnalytics)
Transactions <- as.xts(read.zoo("/Users/robert/Downloads/transactions.csv", header=FALSE, FUN=as.POSIXct, sep=",", format="%m/%d/%Y"))
colnames(Transactions) <- c('Action', 'Symbol', 'SecurityDescription', 'Cash', 'Quantity', 'Price', 'Commission', 'Fees', 'Blank', 'Amount', 'SettlementDate')

Transactions$Symbol = sub('[ -]*','INST',Transactions$Symbol)

symbols = as.character((unique(Transactions$Symbol)))
portfolioname = 'portfolio'
accountname = 'account'

rm(list=ls(envir=.blotter),envir=.blotter)

portfolio <- initPortf(portfolioname, symbols=symbols)
account = initAcct(accountname, portfolios=portfolioname)
for (i in 1:NROW(Transactions)) {
	Transaction = Transactions[i]
        CurrentDate=time(Transaction)
	equity = getEndEq(account, CurrentDate)
        symbol = Transaction$Symbol
        price = as.numeric(Transaction$Price)
        quantity = as.numeric(Transaction$Quantity)
        if(is.na(Transaction$Fees)) {
            fees = 0
        } else {
            fees = as.numeric(Transaction$Fees)
        }
        if (is.na(Transaction$Commission)) {
	    commission = 0
        } else {
            commission = as.numeric(Transaction$Commission)
        }
	multiplier = 1
        if(substr(symbol,2,2) == '-') {
		multiplier = 100
	}
	addTxn(Portfolio=portfolio, Symbol=symbol, TxnDate=CurrentDate, TxnPrice=(price*multiplier), TxnQty=quantity, TxnFees=(commission + fees), verbose=TRUE, ConMult=1)
	portfolio = updatePortf(Portfolio = portfolio, Dates = CurrentDate)
}
#portfolio = updatePortf(Portfolio = portfolio, Dates = CurrentDate)
#account = updateAcct(Account = account, Dates = CurrentDate)
#account = updateEndEq(Account = account, Dates = CurrentDate)

On Apr 26, 2010, at 8:40 AM, Brian G. Peterson wrote:

> As should be clear from the documentation and examples, we have followed the 'quantmod' convention of storing the market data as the symbol name.
> 
> My presumtion is that as you could not possibly have stored your market data as '-24702R9GE' (as this is an illegal R variable name), you have likely also not stored it as 'INST24702R9GE'
> 
> The call that is failing, however, suggests a different problem.
> 
> This error:
> 
> Error in get(x, pos = .instrument) : object 'INST24702R9GE' not found
> 
> suggests that you haven't declared the instrument, with currency, multiplier, etc.
> 
> it's not clear if the next error is directly related, or if it is simply the code falling back to try to find the instrument data in the global environment.
> 
> Diagnosing this would be much easier if you provided a complete, reproducible example, per the posting guide.  Then I wouldn't have to guess, I could simply run the code.
> 
> Regards,
> 
>     - Brian
> 
> On 04/26/2010 08:32 AM, Robert Nicholson wrote:
>> Why then do I get this?
>> 
>> I added
>> 
>> Transactions$Symbol = sub('[ -]*','INST',Transactions$Symbol)
>> 
>> so this prefixes everything I had with INST presumably I can have digits in the name
>> 
>> 1] "2008-05-30 INST24702R9GE 10 @ 0.35"
>> Error in get(x, pos = .instrument) : object 'INST24702R9GE' not found
>> Error in get(Symbol, envir = as.environment(.GlobalEnv)) :
>>   object 'INST24702R9GE' not found
>> 
>> 
>> On Apr 26, 2010, at 5:01 AM, Brian G. Peterson wrote:
>> 
>>   
>>> R variable names may not start with a number.
>>> 
>>> instruments will be used to create R variables, so all normal naming rules for variables apply.
>>> 
>>> Robert Nicholson wrote:
>>>     
>>>> Why when
>>>> names(getPortfolio(portfolio))
>>>>  [1] " -24702R9GE"
>>>> do I have
>>>> [1] "2008-05-30  -24702R9GE 10 @ 35"
>>>> Error in get(x, pos = .instrument) : object ' -24702R9GE' not found
>>>> Error in get(Symbol, envir = as.environment(.GlobalEnv)) :   object ' -24702R9GE' not found
>>>> when I call
>>>> 	portfolio = updatePortf(Portfolio = portfolio, Dates = CurrentDate)
>>>>       
>>> 
>>> -- 
>>> Brian G. Peterson
>>> http://braverock.com/brian/
>>> Ph: 773-459-4973
>>> IM: bgpbraverock
>>>     
> 
> 
> -- 
> Brian G. Peterson
> http://braverock.com/brian/
> Ph: 773-459-4973
> IM: bgpbraverock
> 
> 



More information about the R-SIG-Finance mailing list