Skip to content
All library documents

Diagnosing Negative Stock-Price Probabilities in a Heston Tree

Article Quant Q&A · Author: Season

Summary

This post describes an implementation problem in a bivariate tree used to price American options under the Heston stochastic-volatility model. The author reports getting a negative probability for the middle stock-price move while following a published tree method and checking the implementation against a reference book. The included function computes up, middle, and down probabilities from the current and next variance, correlation, mean adjustment, and time step.

A sample parameter set produces a slightly negative middle probability, while the other two probabilities are positive. This illustrates that a probability formula or chosen inputs can yield invalid transition weights, a concern for tree construction and option pricing. The post does not include an answer, derivation, or diagnosis, so it does not establish whether the issue comes from the implementation, the method's assumptions, or parameter constraints. It is best read as a concrete numerical debugging question rather than a resolved explanation.

Key ideas

  • A Heston bivariate tree can produce a negative middle transition probability in the reported implementation.
  • The transition weights depend on variance, correlation, drift adjustment, and the time step.
  • The sample result includes a slightly negative middle probability alongside positive up and down probabilities.
  • The post gives no diagnosis or fix, so the source of the invalid probability remains unresolved.

Tags

Full text
# negative transition probabilities in the heston model


# negative transition probabilities in the heston model












I've been trying to implement a bivariate tree for pricing american options with the heston model in R using the paper of Beliaeva and Nawalkha (http://papers.ssrn.com/sol3/papers.cfm?abstract_id=1107934).

However I am obtaining negative transition probabilities for the middle node change of the stock price. I am pretty sure my coding is correct, I also cross-checked with the book by Rouah (http://eu.wiley.com/WileyCDA/WileyTitle/productCd-1118548256.html) and what I did resembles the code there.

Has anyone else experienced this or can give some pointers?

EDIT: Here's my code for the stock probabilities. As a sample I used the numbers given in the Beliaeva paper: S_0 = 100, V_0 = 0.04, sigma = 0.1, kappa = 3, theta = 0.04, rho = -0.1.

The results I got where: (0.4860517840, -0.0008249158, 0.5147731319)

```
stockProb <- function(v0,vt,yt,sigma,kappa,rho,delT)
{
  muY <- (rho/sigma*kappa-0.5)*vt
  sigmayt <- sqrt(1-rho^2)*sqrt(vt)
  sigmay0 <- sqrt(1-rho^2)*sqrt(v0)
  if(vt > 0)
  {
    k <- ceiling(sqrt(vt/v0))
  }
  else
  {
    k <- 1
  }

  I <- round(muY/k/sigmay0*sqrt(delT))
  yu <- yt + (I+1)*k*sigmay0*sqrt(delT)
  ym <- yt + I*k*sigmay0*sqrt(delT)
  yd <- yt + (I-1)*k*sigmay0*sqrt(delT)  
  eu <- yu - yt - muY*delT
  em <- ym - yt - muY*delT
  ed <- yd - yt - muY*delT
  pu <- 0.5*(sigmayt^2*delT + em*ed)/k^2/sigmay0^2/delT
  pm <- -(sigmayt^2*delT + eu*ed)/k^2/sigmay0^2/delT
  pd <- 0.5*(sigmayt^2*delT +eu*em)/k^2/sigmay0^2/delT  
  ps <- c(pu,pm,pd)
  ps
}
```

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.