Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Avhz RustQuant Forward Start Backend

From Leeroopedia


Knowledge Sources
Domains Option_Pricing, Quantitative_Finance
Last Updated 2026-02-07 19:00 GMT

Overview

Concrete tool for pricing forward start options using the Rubinstein (1990) analytical formula provided by the RustQuant library.

Description

This module implements the ForwardStartOption struct for pricing options whose strike is set at a future date as a proportion of the underlying price at that time. The strike is determined by the alpha parameter:

  • alpha < 1 -- The call (put) starts in-the-money (out-of-the-money) by (1 - alpha)%.
  • alpha = 1 -- The option starts at-the-money.
  • alpha > 1 -- The call (put) starts out-of-the-money (in-the-money) by (alpha - 1)%.

The price() method implements Rubinstein's (1990) closed-form formula using a standard BSM-like framework with cost of carry b = r - q. The formula uses d1 = (ln(1/alpha) + (b + v^2/2)(T - t)) / (v * sqrt(T - t)) where t is the start date and T is the end date. The struct supports the builder pattern via derive_builder. Returns a tuple of (call_price, put_price).

Usage

Use when pricing forward start options where the strike is determined at a future date relative to the then-prevailing spot price, such as in employee stock option plans or cliquet structures.

Code Reference

Source Location

Signature

#[derive(derive_builder::Builder, Debug)]
pub struct ForwardStartOption {
    pub initial_price: f64,
    pub alpha: f64,
    pub risk_free_rate: f64,
    pub volatility: f64,
    pub dividend_rate: f64,
    pub valuation_date: Option<Date>,
    pub start: Date,
    pub end: Date,
}

impl ForwardStartOption {
    #[must_use]
    pub fn price(&self) -> (f64, f64)
}

Import

use RustQuant::instruments::ForwardStartOption;

I/O Contract

Inputs

Name Type Required Description
initial_price f64 Yes Initial underlying price (S)
alpha f64 Yes Strike proportion factor; strike = alpha * S at the start date
risk_free_rate f64 Yes Risk-free interest rate (r)
volatility f64 Yes Volatility parameter (v)
dividend_rate f64 Yes Continuous dividend rate (q)
valuation_date Option<Date> No Valuation date; defaults to today
start Date Yes Date when the strike is set (T)
end Date Yes Option expiration date (t)

Outputs

Name Type Description
(call, put) (f64, f64) Tuple of forward start call and put prices

Usage Examples

use RustQuant::instruments::ForwardStartOption;
use RustQuant::time::today;
use time::Duration;

let fwd_start = ForwardStartOption {
    initial_price: 60.0,
    alpha: 1.1,            // starts 10% OTM for calls
    risk_free_rate: 0.08,
    volatility: 0.3,
    dividend_rate: 0.04,
    valuation_date: None,
    start: today() + Duration::days(91),
    end: today() + Duration::days(365),
};

let (call_price, put_price) = fwd_start.price();

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment