Modelling Financial Growth

Extends a simple exponential growth model to sequences of financial prices.  A model of normally distributed logarithmic returns is demonstrated.

When we model the growth of a financial asset we are interested in its growth as a function of time.  If we have a principal, (Subscript[p, 0]), at time zero, what will its value be at time, t; what is the function p(t)?  It is often natural to start with exponential growth as this works well for systems that do not grow fast enough to consume all the resources needed for growth.  The main idea of exponential growth, however, is that there is a constant rate, r, of growth.  The formula for p(t) is then derived from a simple differential formula:

((δp)/(δt))= r

where  r is the constant rate of growth.

Solving this by integrating, we get:

∫(1/p)dp=∫ rdt

log(p)-log((Subscript[p, 0]))=r t-0

where (Subscript[t, 0]) is taken to be 0, and (Subscript[p, 0]) is the starting principal.

Taking exponents

(p/(Subscript[p, 0]))=(e^(r t))

Thus

p(t)=(Subscript[p, 0]) (e^(r t))

r here is a logarithmic return.  To convert it to a decimal return, dr, we take the exponent and subtract 1.

dr=(e^r)-1.

And to convert the decimal return to a logarithmic return:

r=log(dr+1)

Substituting this value into the equation for p(t), we get the standard formula for compound growth.

p(t)=(Subscript[p, 0]) (((1 + dr))^t)

Now suppose that we have a sequence of prices.  We can compute the logarithmic returns for each interval in the series.

{(Subscript[p, 0]),(Subscript[p, 1]),(Subscript[p, 2]),(Subscript[p, 3]),(Subscript[p, 4]),(Subscript[p, 5])}

The log prices are

{log((Subscript[p, 0])),log((Subscript[p, 1])),log((Subscript[p, 2])),log((Subscript[p, 3])),log((Subscript[p, 4])),log((Subscript[p, 5]))}

The log returns of this series are simply the sequential differences of log prices at a unit interval, in our example daily.

{log((Subscript[p, 1]))-log((Subscript[p, 0])),log((Subscript[p, 2]))-log((Subscript[p, 1])),log((Subscript[p, 3]))-log((Subscript[p, 2])),log((Subscript[p, 4]))-log((Subscript[p, 3])),log((Subscript[p, 5]))-log((Subscript[p, 4]))}.

or equivalently.

{log(((Subscript[p, 1])/(Subscript[p, 0]))),log(((Subscript[p, 2])/(Subscript[p, 1]))),log(((Subscript[p, 3])/(Subscript[p, 2]))),log(((Subscript[p, 4])/(Subscript[p, 3]))),log(((Subscript[p, 5])/(Subscript[p, 4])))}

The sum of the series of returns now is the same as the return over the whole interval since all but the first and last log prices cancel out:

log((Subscript[p, 5]))-log((Subscript[p, 0]))

The average log return over all the prices becomes:

(1/5) (log((Subscript[p, 5]))-log((Subscript[p, 0]))).

Now we have set up a structure to study the variability of market prices.  If we take a sequence of prices, typically determined at the end of a market day.  We can calculate the log returns for each interval.  These log returns could be imagined as random variables as Louis Bachelier proposed in 1900.  His thesis suggested that Brownian motion could be used to model stock market options.  Let’s try modeling market log returns as behaving as normally distributed random variables.  The graph below assumes 250 trading days in a year, with an expected annual gain of 7% per year, with a daily log return standard deviation of 0.01.  The starting price is 100 and the series of log returns are accumulated after adding them to a starting point of log[100], creating a sequence of log prices.  The exponent to base e is taken to convert to prices.

lr=RandomVariate[NormalDistribution[Log[1.07]/250,0.01],1250];
ListLinePlot[Transpose[{Range[0,1250]/250.,Exp[Accumulate[Prepend[lr,Log[100.]]]]}],PlotRange->All,Frame->True,FrameLabel->{"Years","Price"},PlotLabel-> "Market Simulation"]

Superficially the model looks convincing, but we will show in subsequent notebooks that the normal distribution and Brownian motion are not a good choice to model market prices.  We will use the methods described here as the basic frame work to examine stock market price time-series.

Financial Data Analysis Home

CellPrint[TextCell["\n\n© Copyright " <> ToString[DateList[][[1]]] <> " Robert H. Rimmer, Jr.    " <> DateString[DateList[], "DateShort"], "Text"]]

© Copyright 2013 Robert H. Rimmer, Jr.    Sun 27 Oct 2013