position {PMwR}R Documentation

Aggregate Transactions to Positions

Description

Use information on single trades to compute a position at a specific point in time.

Usage

position(amount, ...)

## Default S3 method:
position(amount, timestamp, instrument, when,
                 drop.zero = FALSE, account = NULL,
                 use.names = NULL, ...)

## S3 method for class 'journal'
position(amount, when, drop.zero = FALSE,
                           use.account = FALSE, ...)

## S3 method for class 'position'
print(x, ..., sep = ":")

Arguments

when

a timestamp or a vector of timestamps; alternatively, several keywords are supported. See Details.

amount

numeric or an object of class journal

timestamp

numeric or character: timestamps, must be sortable

instrument

character: symbols to identify different instruments

account

character: description of account. Ignored if NULL.

use.account

logical. If TRUE, positions are computed by account and instrument; otherwise by instrument only.

use.names

logical or NULL. The argument handles whether names of amount are used as instruments. If NULL: if amount is named and instrument is not specified, names of amount are interpreted as instruments. If use.names is FALSE, names of amount are ignored. (Ignoring names was the default behaviour prior to PMwR version 0.11.)

drop.zero

If logical, drop instruments that have a zero position; default is FALSE. If numeric, it is used as a tolerance; e.g., a value of 1-e12 will drop any position whose absolute amount is smaller than 1-e12.

x

An object of type position.

...

arguments passed to print

sep

A regular expression. Split instruments accordingly. Not implemented yet.

Details

position computes positions for lists of trades. position is a generic function; most useful is the method for journals.

The function checks if timestamp is sorted (see is.unsorted) and sorts the journal by timestamp, if required. If there are (some) NA values in timestamp, but timestamp is sorted otherwise, the function will proceed (with a warning, though).

The argument when can also be specified as one of several keywords: last (or newest or latest) provides the position at the latest timestamp; first (or oldest) provides the position at the earliest timestamp; all provides the positions at all timestamps in the journal. endofday, endofmonth and endofyear provide positions at the end of all calendar days, months and years within the timestamp range of the journal. The latter keywords can only work if timestamp can be coerced to Date.

Value

An object of class position, which is a numeric matrix with instrument and timestamp attributes. Note that position will never drop the result's dim attribute: it will always be a matrix of size length(when) times length(unique(instrument)), which may not be obvious from the printed output. The rows of the matrix correspond to timestamps; the columns correspond to instruments.

To extract the numeric position matrix, say as.matrix(p).

Author(s)

Enrico Schumann

References

Schumann, E. (2023) Portfolio Management with R. https://enricoschumann.net/R/packages/PMwR/; in particular, see
https://enricoschumann.net/R/packages/PMwR/manual/PMwR.html#computing-balances

See Also

journal; internal computations are handled by cumsum and findInterval

Examples

position(amount = c(1, 1, -1, 3, -4),
         timestamp = 1:5, when = 4.9)

## using a journal
J <- journal(timestamp = 1:5, amount = c(1, 1, -1, 3, -4))
position(J, when = 4.9)


## 'declaring' a position, using named amounts
amount <- c(1, 1, 1)
instrument <- c("A", "A", "B")
position(amount = amount, instrument = instrument)
## .... or equivalently
amount <- c(A = 2, B = 1)
position(amount)

## ignore names of amount
position(amount, use.names = FALSE)

[Package PMwR version 0.19-5 Index]