Skip to content

What are the requirements for instrument names in a blotter portfolio?

5 messages · Robert Nicholson, Brian G. Peterson

#
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)
#
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 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:

            
#
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:

  
    
#
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: