arithmetic_asian_bounds: Bounds for Arithmetic Asian Option with Price Impact

View source: R/arithmetic_asian.R

arithmetic_asian_boundsR Documentation

Bounds for Arithmetic Asian Option with Price Impact

Description

Computes lower and upper bounds for the arithmetic Asian option (call or put) using the relationship between arithmetic and geometric means (Jensen's inequality).

Usage

arithmetic_asian_bounds(
  S0,
  K,
  r,
  u,
  d,
  lambda,
  v_u,
  v_d,
  n,
  option_type = "call",
  compute_path_specific = FALSE,
  validate = TRUE
)

Arguments

S0

Initial stock price (must be positive)

K

Strike price (must be positive)

r

Gross risk-free rate per period (e.g., 1.05)

u

Base up factor in CRR model (must be > d)

d

Base down factor in CRR model (must be positive)

lambda

Price impact coefficient (non-negative)

v_u

Hedging volume on up move (non-negative)

v_d

Hedging volume on down move (non-negative)

n

Number of time steps (positive integer, recommended n <= 20)

option_type

Character; either "call" (default) or "put"

compute_path_specific

Logical. If TRUE, computes the tighter path-specific upper bound using exact enumeration of all 2^n paths. Default is FALSE.

validate

Logical; if TRUE, performs input validation (default TRUE)

Details

Computes rigorous upper and lower bounds for arithmetic Asian options using Jensen's inequality. The lower bound is the geometric Asian option price (from AM-GM inequality). Two types of upper bounds are available:

Global upper bound: Uses a worst-case spread parameter applicable to all paths.

Path-specific upper bound: Computes tighter bounds by using path-specific spread parameters. This requires exact enumeration of all 2^n paths in the binomial tree (no sampling or approximation). The path-specific bound is typically much tighter than the global bound.

For detailed mathematical formulations, see the package vignettes and the reference paper.

Value

List containing:

lower_bound

Lower bound for arithmetic option (= geometric option price)

upper_bound

Upper bound for arithmetic option (global bound, for backward compatibility)

upper_bound_global

Global upper bound using \rho^*

upper_bound_path_specific

Path-specific upper bound (only if compute_path_specific=TRUE, otherwise NA)

rho_star

Spread parameter \rho^*

EQ_G

Expected geometric average under risk-neutral measure

V0_G

Geometric Asian option price (same as lower_bound)

n_paths_used

Number of paths used for path-specific bound (2^n if computed, 0 otherwise)

References

Tiwari, P., & Majumdar, S. (2025). Asian option valuation under price impact. arXiv preprint. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.48550/arXiv.2512.07154")}

See Also

price_geometric_asian

Examples

# Compute basic bounds (global bound only) for call option
bounds <- arithmetic_asian_bounds(
  S0 = 100, K = 100, r = 1.05, u = 1.2, d = 0.8,
  lambda = 0.1, v_u = 1, v_d = 1, n = 3, option_type = "call"
)

print(bounds)

# Compute bounds for put option
bounds_put <- arithmetic_asian_bounds(
  S0 = 100, K = 100, r = 1.05, u = 1.2, d = 0.8,
  lambda = 0.1, v_u = 1, v_d = 1, n = 3, option_type = "put"
)

# Compute with path-specific bound (uses exact enumeration of all 2^n paths)
bounds_ps <- arithmetic_asian_bounds(
  S0 = 100, K = 100, r = 1.05, u = 1.2, d = 0.8,
  lambda = 0.1, v_u = 1, v_d = 1, n = 5,
  compute_path_specific = TRUE
)

print(bounds_ps)

# Estimate arithmetic option price as midpoint of path-specific bounds
if (!is.na(bounds_ps$upper_bound_path_specific)) {
  estimated_price <- mean(c(bounds_ps$lower_bound,
                            bounds_ps$upper_bound_path_specific))
  cat("Estimated price:", estimated_price, "\n")
}


AsianOption documentation built on Dec. 23, 2025, 1:08 a.m.