Task
Create a set of scenarios based on historical price movements.
Preparation
You need:
- a matrix of the historical prices — times (in order) in the rows and assets in the columns.
- the
pprobeSup
package
The pprobeSup
package needs to be loaded into your R session:
require(pprobeSup)
If pprobeSup
is not installed on your machine, then you can get it with:
install.packages("pprobeSup", repos="https://www.portfolioprobe.com/R")
or alternatively with:
install.packages("pprobeSup", repos="https://www.portfolioprobe.com/R", type="source")
Doing the example
You need to have the pprobeData
package loaded into your R session:
require(pprobeData)
This package may be installed from the same repository.
Doing it
We create 100 scenarios of monthly price changes on the first 50 assets in the price matrix:
monScen <- pp.historyScenarios(xassetPrices[, 1:50], template=c(0,21), number=100)
The result is a three-dimensional array that is 2 (times) by 50 (assets) by 100 (scenarios):
> dim(monScen) [1] 2 50 100
Explanation
The template
argument specifies the time relation of data that will go into the scenarios. In this example the first row of the first scenario will be some row of the price matrix and the second row of the first scenario will be the row of the price matrix that is 21 rows later.
template
normally starts with a zero and is strictly increasing.
The final task that pp.historyScenarios
performs is to adjust all of the scenarios so that they all correspond to a specific (current) price. If a prices
argument is not given, then it defaults to the last row of the price matrix. Thus the first row of all scenarios will be the same.
Further details
time sequences
If your utility needs to estimate values over time (as the four moments utility does), then template
should be a sequence of numbers:
dqScen <- pp.historyScenarios(xassetPrices[, 1:50], template=0:62, number=100)
The result is a 63 by 50 by 100 array.
short histories
The number
argument says how many scenarios to generate based on a random selection of all the possible starting places. If you have a short history, that is going to be silly. You will want to generate one of each possible scenario. To do that use the which
argument instead of the number
argument:
shortHistory <- xassetPrices[1:36, 1:50] shortScen <- pp.historyScenarios(shortHistory, template=0:1, which=1:(nrow(shortHistory)-1))
The result is a 2 by 50 by 35 array. There are 35 possible scenarios and we get each one.
See also
Navigation
- Back to “Scenario optimization”
- Back to “Optimize trades”
- Back to the top level of “Portfolio Probe Cookbook”