<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TinyComputers.io (Posts about options pricing)</title><link>https://tinycomputers.io/</link><description></description><atom:link href="https://tinycomputers.io/categories/options-pricing.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 A.C. Jokela 
&lt;!-- div style="width: 100%" --&gt;
&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"&gt;&lt;img alt="" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/80x15.png" /&gt; Creative Commons Attribution-ShareAlike&lt;/a&gt;&amp;nbsp;|&amp;nbsp;
&lt;!-- /div --&gt;
</copyright><lastBuildDate>Wed, 11 Mar 2026 00:05:44 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Monte Carlo Method of Pricing Options</title><link>https://tinycomputers.io/posts/monte-carlo-method-of-pricing-options.html?utm_source=feed&amp;utm_medium=rss&amp;utm_campaign=rss</link><dc:creator>A.C. Jokela</dc:creator><description>&lt;div class="audio-widget"&gt;
&lt;div class="audio-widget-header"&gt;
&lt;span class="audio-widget-icon"&gt;🎧&lt;/span&gt;
&lt;span class="audio-widget-label"&gt;Listen to this article&lt;/span&gt;
&lt;/div&gt;
&lt;audio controls preload="metadata"&gt;
&lt;source src="https://tinycomputers.io/monte-carlo-method-of-pricing-options_tts.mp3" type="audio/mpeg"&gt;
&lt;/source&gt;&lt;/audio&gt;
&lt;div class="audio-widget-footer"&gt;25 min · AI-generated narration&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;Pricing American Options with the Monte Carlo Method&lt;/h2&gt;
&lt;h3&gt;Introduction to Monte Carlo Simulation&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://tinycomputers.io/images/monte-carlo.webp" style="width: 640px; box-shadow: 0 30px 40px rgba(0,0,0,.1); float: right; padding: 20px 20px 20px 20px;"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://baud.rs/fHxO6f"&gt;Monte Carlo simulation&lt;/a&gt; is a powerful computational technique that relies on repeated random sampling to solve complex problems. It is widely used in various fields, including finance, physics, and engineering. The core idea behind Monte Carlo simulation is to generate a large number of random scenarios and then analyze the results to gain insights into the problem at hand.&lt;/p&gt;
&lt;p&gt;To illustrate the concept, let's consider a simplified example of estimating the value of π (pi) using Monte Carlo simulation. Imagine a square with sides of length 1 and a circle inscribed within the square. The circle's radius is 0.5, and its area is π/4. By randomly generating points within the square and counting the number of points that fall inside the circle, we can estimate the value of π.&lt;/p&gt;
&lt;p&gt;Here's a step-by-step breakdown of the process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate a large number of random points (x, y) within the square, where both x and y are between 0 and 1.&lt;/li&gt;
&lt;li&gt;For each point, calculate the distance from the point to the center of the square (0.5, 0.5) using the formula:&lt;/li&gt;
&lt;/ol&gt;
&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;mi&gt;distance&lt;/mi&gt;
    &lt;mo&gt;=&lt;/mo&gt;
    &lt;msqrt&gt;
      &lt;msup&gt;
        &lt;mrow&gt;
          &lt;mo&gt;(&lt;/mo&gt;
          &lt;mi&gt;x&lt;/mi&gt;
          &lt;mo&gt;-&lt;/mo&gt;
          &lt;mn&gt;0.5&lt;/mn&gt;
          &lt;mo&gt;)&lt;/mo&gt;
        &lt;/mrow&gt;
        &lt;mn&gt;2&lt;/mn&gt;
      &lt;/msup&gt;
      &lt;mo&gt;+&lt;/mo&gt;
      &lt;msup&gt;
        &lt;mrow&gt;
          &lt;mo&gt;(&lt;/mo&gt;
          &lt;mi&gt;y&lt;/mi&gt;
          &lt;mo&gt;-&lt;/mo&gt;
          &lt;mn&gt;0.5&lt;/mn&gt;
          &lt;mo&gt;)&lt;/mo&gt;
        &lt;/mrow&gt;
        &lt;mn&gt;2&lt;/mn&gt;
      &lt;/msup&gt;
    &lt;/msqrt&gt;
  &lt;/mstyle&gt;
&lt;/math&gt;

&lt;ol&gt;
&lt;li&gt;If the distance is less than or equal to 0.5 (the radius of the circle), count the point as inside the circle.&lt;/li&gt;
&lt;li&gt;After generating all the points, calculate the ratio of points inside the circle to the total number of points.&lt;/li&gt;
&lt;li&gt;Multiply the ratio by 4 to estimate the value of π.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As the number of generated points increases, the estimated value of π will converge to its true value. This example demonstrates how Monte Carlo simulation can be used to solve problems by generating random scenarios and analyzing the results.&lt;/p&gt;
&lt;h3&gt;Pricing American Options with Monte Carlo Simulation&lt;/h3&gt;
&lt;p&gt;American options are financial contracts that give the holder the right, but not the obligation, to buy (call option) or sell (put option) an underlying asset at a predetermined price (strike price) on or before the expiration date. Unlike European options, which can only be exercised at expiration, American options can be exercised at any time prior to expiration. This early exercise feature makes pricing American options more challenging than pricing European options.&lt;/p&gt;
&lt;p&gt;Monte Carlo simulation can be used to price American options by simulating the price paths of the underlying asset and determining the optimal exercise strategy at each time step. Here's a high-level overview of the process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate a large number of price paths for the underlying asset using a suitable stochastic process, such as &lt;a href="https://baud.rs/y5pRxb"&gt;Geometric Brownian Motion&lt;/a&gt; (GBM). Each price path represents a possible future scenario. The price path can be simulated using the following formula:&lt;/li&gt;
&lt;/ol&gt;
&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;msub&gt;
      &lt;mi&gt;S&lt;/mi&gt;
      &lt;mi&gt;t&lt;/mi&gt;
    &lt;/msub&gt;
    &lt;mo&gt;=&lt;/mo&gt;
    &lt;msub&gt;
      &lt;mi&gt;S&lt;/mi&gt;
      &lt;mn&gt;0&lt;/mn&gt;
    &lt;/msub&gt;
    &lt;mi&gt;exp&lt;/mi&gt;
    &lt;mrow&gt;
      &lt;mo&gt;(&lt;/mo&gt;
      &lt;mrow&gt;
        &lt;mo&gt;(&lt;/mo&gt;
        &lt;mi&gt;r&lt;/mi&gt;
        &lt;mo&gt;-&lt;/mo&gt;
        &lt;mfrac&gt;
          &lt;msup&gt;
            &lt;mi&gt;σ&lt;/mi&gt;
            &lt;mn&gt;2&lt;/mn&gt;
          &lt;/msup&gt;
          &lt;mn&gt;2&lt;/mn&gt;
        &lt;/mfrac&gt;
        &lt;mo&gt;)&lt;/mo&gt;
        &lt;mi&gt;t&lt;/mi&gt;
        &lt;mo&gt;+&lt;/mo&gt;
        &lt;mi&gt;σ&lt;/mi&gt;
        &lt;msqrt&gt;
          &lt;mi&gt;t&lt;/mi&gt;
        &lt;/msqrt&gt;
        &lt;mi&gt;Z&lt;/mi&gt;
      &lt;/mrow&gt;
      &lt;mo&gt;)&lt;/mo&gt;
    &lt;/mrow&gt;
  &lt;/mstyle&gt;
&lt;/math&gt;
&lt;p&gt;where:
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;msub&gt;
      &lt;mi&gt;S&lt;/mi&gt;
      &lt;mi&gt;t&lt;/mi&gt;
    &lt;/msub&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is the stock price at time t
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;msub&gt;
      &lt;mi&gt;S&lt;/mi&gt;
      &lt;mn&gt;0&lt;/mn&gt;
    &lt;/msub&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is the initial stock price
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;mi&gt;r&lt;/mi&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is the risk-free interest rate
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;mi&gt;σ&lt;/mi&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is the volatility of the stock
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;mi&gt;t&lt;/mi&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is the time step
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;mi&gt;Z&lt;/mi&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is a standard normal random variable&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;At each time step along each price path, compare the intrinsic value of the option (the payoff from immediate exercise) with the continuation value (the expected value of holding the option).&lt;/li&gt;
&lt;li&gt;If the intrinsic value is greater than the continuation value, the option should be exercised, and the payoff is recorded.&lt;/li&gt;
&lt;li&gt;If the continuation value is greater than the intrinsic value, the option should be held, and the simulation continues to the next time step.&lt;/li&gt;
&lt;li&gt;At expiration, the option is exercised if it is in-the-money (i.e., the stock price is above the strike price for a call option or below the strike price for a put option).&lt;/li&gt;
&lt;li&gt;The average of the discounted payoffs across all price paths provides an estimate of the option price.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To determine the continuation value at each time step, a common approach is to use the Least Squares Monte Carlo (LSM) method, which involves regressing the discounted future payoffs on a set of basis functions of the current state variables (e.g., stock price and time to expiration).&lt;/p&gt;
&lt;p&gt;One of the advantages of using Monte Carlo simulation for pricing American options is its flexibility in handling complex payoff structures and multiple underlying assets. However, it can be computationally intensive, especially for high-dimensional problems or when a large number of price paths is required for accurate results.&lt;/p&gt;
&lt;p&gt;In practice, implementing the Monte Carlo method for pricing American options involves several technical considerations, such as choosing an appropriate stochastic process for the underlying asset, selecting suitable basis functions for the LSM algorithm, and applying variance reduction techniques to improve the efficiency of the simulation.&lt;/p&gt;
&lt;p&gt;Despite its challenges, Monte Carlo simulation remains a valuable tool for pricing American options and has been widely adopted in the financial industry. Its ability to handle complex scenarios and provide insights into the option's behavior under various market conditions makes it an indispensable technique in the field of quantitative finance.&lt;/p&gt;
&lt;h3&gt;Implementing the Monte Carlo Method for American Option Pricing&lt;/h3&gt;
&lt;p&gt;To implement the Monte Carlo method for pricing American options, we need to follow a step-by-step approach. Here's a more detailed breakdown of the process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Define the parameters of the American option, such as the strike price (K), expiration time (T), risk-free interest rate (r), and volatility (σ).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generate a large number of price paths for the underlying asset using the Geometric Brownian Motion (GBM) model. Each price path consists of discrete time steps from the current time to the expiration time. The stock price at each time step can be calculated using the following formula:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;msub&gt;
      &lt;mi&gt;S&lt;/mi&gt;
      &lt;mrow&gt;
        &lt;mi&gt;t&lt;/mi&gt;
        &lt;mo&gt;+&lt;/mo&gt;
        &lt;mi&gt;Δ&lt;/mi&gt;
        &lt;mi&gt;t&lt;/mi&gt;
      &lt;/mrow&gt;
    &lt;/msub&gt;
    &lt;mo&gt;=&lt;/mo&gt;
    &lt;msub&gt;
      &lt;mi&gt;S&lt;/mi&gt;
      &lt;mi&gt;t&lt;/mi&gt;
    &lt;/msub&gt;
    &lt;mi&gt;exp&lt;/mi&gt;
    &lt;mrow&gt;
      &lt;mo&gt;(&lt;/mo&gt;
      &lt;mrow&gt;
        &lt;mo&gt;(&lt;/mo&gt;
        &lt;mi&gt;r&lt;/mi&gt;
        &lt;mo&gt;-&lt;/mo&gt;
        &lt;mfrac&gt;
          &lt;msup&gt;
            &lt;mi&gt;σ&lt;/mi&gt;
            &lt;mn&gt;2&lt;/mn&gt;
          &lt;/msup&gt;
          &lt;mn&gt;2&lt;/mn&gt;
        &lt;/mfrac&gt;
        &lt;mo&gt;)&lt;/mo&gt;
        &lt;mi&gt;Δ&lt;/mi&gt;
        &lt;mi&gt;t&lt;/mi&gt;
        &lt;mo&gt;+&lt;/mo&gt;
        &lt;mi&gt;σ&lt;/mi&gt;
        &lt;msqrt&gt;
          &lt;mi&gt;Δ&lt;/mi&gt;
          &lt;mi&gt;t&lt;/mi&gt;
        &lt;/msqrt&gt;
        &lt;msub&gt;
          &lt;mi&gt;Z&lt;/mi&gt;
          &lt;mi&gt;t&lt;/mi&gt;
        &lt;/msub&gt;
      &lt;/mrow&gt;
      &lt;mo&gt;)&lt;/mo&gt;
    &lt;/mrow&gt;
  &lt;/mstyle&gt;
&lt;/math&gt;
&lt;p&gt;where:
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;msub&gt;
      &lt;mi&gt;S&lt;/mi&gt;
      &lt;mrow&gt;
        &lt;mi&gt;t&lt;/mi&gt;
        &lt;mo&gt;+&lt;/mo&gt;
        &lt;mi&gt;Δ&lt;/mi&gt;
        &lt;mi&gt;t&lt;/mi&gt;
      &lt;/mrow&gt;
    &lt;/msub&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is the stock price at time t + Δt
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;msub&gt;
      &lt;mi&gt;S&lt;/mi&gt;
      &lt;mi&gt;t&lt;/mi&gt;
    &lt;/msub&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is the stock price at time t
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;mi&gt;Δ&lt;/mi&gt;
    &lt;mi&gt;t&lt;/mi&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is the size of the time step
- &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;msub&gt;
      &lt;mi&gt;Z&lt;/mi&gt;
      &lt;mi&gt;t&lt;/mi&gt;
    &lt;/msub&gt;
  &lt;/mstyle&gt;
&lt;/math&gt; is a standard normal random variable at time t&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;At each time step along each price path, calculate the intrinsic value of the option. For a call option, the intrinsic value is given by:&lt;/li&gt;
&lt;/ol&gt;
&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;mrow&gt;
      &lt;mi&gt;max&lt;/mi&gt;
      &lt;mo&gt;(&lt;/mo&gt;
      &lt;msub&gt;
        &lt;mi&gt;S&lt;/mi&gt;
        &lt;mi&gt;t&lt;/mi&gt;
      &lt;/msub&gt;
      &lt;mo&gt;-&lt;/mo&gt;
      &lt;mi&gt;K&lt;/mi&gt;
      &lt;mo&gt;,&lt;/mo&gt;
      &lt;mn&gt;0&lt;/mn&gt;
      &lt;mo&gt;)&lt;/mo&gt;
    &lt;/mrow&gt;
  &lt;/mstyle&gt;
&lt;/math&gt;
&lt;p&gt;For a put option, the intrinsic value is given by:&lt;/p&gt;
&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;
  &lt;mstyle mathsize="34px"&gt;
    &lt;mrow&gt;
      &lt;mi&gt;max&lt;/mi&gt;
      &lt;mo&gt;(&lt;/mo&gt;
      &lt;mi&gt;K&lt;/mi&gt;
      &lt;mo&gt;-&lt;/mo&gt;
      &lt;msub&gt;
        &lt;mi&gt;S&lt;/mi&gt;
        &lt;mi&gt;t&lt;/mi&gt;
      &lt;/msub&gt;
      &lt;mo&gt;,&lt;/mo&gt;
      &lt;mn&gt;0&lt;/mn&gt;
      &lt;mo&gt;)&lt;/mo&gt;
    &lt;/mrow&gt;
  &lt;/mstyle&gt;
&lt;/math&gt;

&lt;ol&gt;
&lt;li&gt;Apply the Least Squares Monte Carlo (LSM) method to estimate the continuation value at each time step. This involves the following substeps:&lt;/li&gt;
&lt;li&gt;Select a set of basis functions that depend on the current stock price and time to expiration. Common choices include polynomials, Laguerre polynomials, or exponential functions.&lt;/li&gt;
&lt;li&gt;For each in-the-money price path at the current time step, calculate the discounted future payoffs from continuing to hold the option.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Regress the discounted future payoffs on the basis functions to obtain an estimate of the continuation value as a function of the current stock price.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compare the intrinsic value with the estimated continuation value at each time step. If the intrinsic value is greater, the option should be exercised, and the payoff is recorded. If the continuation value is greater, the option should be held, and the simulation continues to the next time step.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At expiration, the option is exercised if it is in-the-money, and the payoff is recorded.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Discount the payoffs at each exercise time back to the present using the risk-free interest rate. The average of the discounted payoffs across all price paths provides an estimate of the American option price.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The LSM method used in step 4 is a critical component of the Monte Carlo approach for pricing American options. It allows us to estimate the continuation value at each time step without the need for a recursive tree-based method. The choice of basis functions and the number of basis functions used in the regression can impact the accuracy of the estimated continuation value and, consequently, the option price.&lt;/p&gt;
&lt;p&gt;Once the Monte Carlo simulation is complete, we can analyze the results to gain insights into the behavior of the American option under various market conditions. This can include examining the distribution of payoffs, the probability of early exercise, and the sensitivity of the option price to changes in the underlying parameters (known as the "Greeks").&lt;/p&gt;
&lt;p&gt;It's important to note that the accuracy of the Monte Carlo method for pricing American options depends on several factors, such as the number of price paths simulated, the size of the time steps, the choice of basis functions in the LSM method, and the presence of any variance reduction techniques. Increasing the number of price paths and reducing the size of the time steps can improve the accuracy of the results but also increase the computational burden.&lt;/p&gt;
&lt;p&gt;In practice, implementing the Monte Carlo method for American option pricing requires careful consideration of these factors and may involve trade-offs between accuracy and computational efficiency. Nonetheless, the Monte Carlo approach remains a powerful and flexible tool for tackling the complex problem of pricing American options, particularly in cases where analytical solutions are not available or when dealing with multi-dimensional or path-dependent options.&lt;/p&gt;
&lt;h3&gt;Code&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://baud.rs/8l7LdN"&gt;Monte Carlo Options Pricing in Rust&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://baud.rs/8sY80K"&gt;Jupyter Notebook with usage example&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Rng&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;consts&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pyo3&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;prelude&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="sd"&gt;/// Calculates the price of an American call option using the Monte Carlo simulation method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Arguments&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// * `spot_price` - The current price of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `strike_price` - The strike price of the option.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `risk_free_rate` - The risk-free interest rate.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `volatility` - The volatility of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `time_to_maturity` - The time to maturity of the option (in years).&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_simulations` - The number of simulations to run.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_steps` - The number of steps in each simulation.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Returns&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// The price of the American call option.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Example&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// ```rust&lt;/span&gt;
&lt;span class="sd"&gt;/// use monte_carlo_options_rs::monte_carlo_american_call;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let spot_price = 100.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let strike_price = 110.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let risk_free_rate = 0.05;&lt;/span&gt;
&lt;span class="sd"&gt;/// let volatility = 0.2;&lt;/span&gt;
&lt;span class="sd"&gt;/// let time_to_maturity = 1.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_simulations = 100_000;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_steps = 252;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let price = monte_carlo_american_call(&lt;/span&gt;
&lt;span class="sd"&gt;///     spot_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     strike_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     risk_free_rate,&lt;/span&gt;
&lt;span class="sd"&gt;///     volatility,&lt;/span&gt;
&lt;span class="sd"&gt;///     time_to_maturity,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_simulations,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_steps,&lt;/span&gt;
&lt;span class="sd"&gt;/// ).unwrap();&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// println!("American call option price: {:.2}", price);&lt;/span&gt;
&lt;span class="sd"&gt;/// ```&lt;/span&gt;
&lt;span class="cp"&gt;#[pyfunction]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PyResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;discount_factor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;powf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rng&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;thread_rng&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;payoffs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;with_capacity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_payoff&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rand_num&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rng&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gen_range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;powf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;powi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rand_num&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;max_payoff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_payoff&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;payoffs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_payoff&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum_payoffs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;payoffs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;avg_payoff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum_payoffs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;avg_payoff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;discount_factor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="sd"&gt;/// Calculates the price of an American put option using the Monte Carlo simulation method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Arguments&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// * `spot_price` - The current price of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `strike_price` - The strike price of the option.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `risk_free_rate` - The risk-free interest rate.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `volatility` - The volatility of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `time_to_maturity` - The time to maturity of the option (in years).&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_simulations` - The number of simulations to run.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_steps` - The number of steps in each simulation.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Returns&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// The price of the American put option.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Example&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// ```rust&lt;/span&gt;
&lt;span class="sd"&gt;/// use monte_carlo_options_rs::monte_carlo_american_put;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let spot_price = 100.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let strike_price = 90.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let risk_free_rate = 0.05;&lt;/span&gt;
&lt;span class="sd"&gt;/// let volatility = 0.2;&lt;/span&gt;
&lt;span class="sd"&gt;/// let time_to_maturity = 1.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_simulations = 100_000;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_steps = 252;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let price = monte_carlo_american_put(&lt;/span&gt;
&lt;span class="sd"&gt;///     spot_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     strike_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     risk_free_rate,&lt;/span&gt;
&lt;span class="sd"&gt;///     volatility,&lt;/span&gt;
&lt;span class="sd"&gt;///     time_to_maturity,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_simulations,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_steps,&lt;/span&gt;
&lt;span class="sd"&gt;/// ).unwrap();&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// println!("American put option price: {:.2}", price);&lt;/span&gt;
&lt;span class="sd"&gt;/// ```&lt;/span&gt;
&lt;span class="cp"&gt;#[pyfunction]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;monte_carlo_american_put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PyResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;discount_factor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;powf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rng&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;thread_rng&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;payoffs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;with_capacity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_payoff&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rand_num&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rng&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gen_range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;powf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;powi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rand_num&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;max_payoff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_payoff&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;payoffs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_payoff&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum_payoffs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;payoffs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;avg_payoff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum_payoffs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;avg_payoff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;discount_factor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="sd"&gt;/// Calculates the delta of an American call option using the finite difference method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// Delta represents the rate of change of the option price with respect to the change in the underlying asset price.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Arguments&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// * `spot_price` - The current price of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `strike_price` - The strike price of the option.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `risk_free_rate` - The risk-free interest rate.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `volatility` - The volatility of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `time_to_maturity` - The time to maturity of the option (in years).&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_simulations` - The number of simulations to run for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_steps` - The number of steps in each simulation for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Returns&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// The delta of the American call option.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Example&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// ```rust&lt;/span&gt;
&lt;span class="sd"&gt;/// use monte_carlo_options_rs::{calculate_delta, monte_carlo_american_call};&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let spot_price = 100.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let strike_price = 110.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let risk_free_rate = 0.05;&lt;/span&gt;
&lt;span class="sd"&gt;/// let volatility = 0.2;&lt;/span&gt;
&lt;span class="sd"&gt;/// let time_to_maturity = 1.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_simulations = 100_000;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_steps = 252;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let delta = calculate_delta(&lt;/span&gt;
&lt;span class="sd"&gt;///     spot_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     strike_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     risk_free_rate,&lt;/span&gt;
&lt;span class="sd"&gt;///     volatility,&lt;/span&gt;
&lt;span class="sd"&gt;///     time_to_maturity,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_simulations,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_steps,&lt;/span&gt;
&lt;span class="sd"&gt;/// ).unwrap();&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// println!("Delta of the American call option: {:.4}", delta);&lt;/span&gt;
&lt;span class="sd"&gt;/// ```&lt;/span&gt;
&lt;span class="cp"&gt;#[pyfunction]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;calculate_delta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PyResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="sd"&gt;/// Calculates the gamma of an American call option using the finite difference method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// Gamma represents the rate of change of the option's delta with respect to the change in the underlying asset price.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Arguments&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// * `spot_price` - The current price of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `strike_price` - The strike price of the option.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `risk_free_rate` - The risk-free interest rate.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `volatility` - The volatility of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `time_to_maturity` - The time to maturity of the option (in years).&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_simulations` - The number of simulations to run for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_steps` - The number of steps in each simulation for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Returns&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// The gamma of the American call option.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Example&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// ```rust&lt;/span&gt;
&lt;span class="sd"&gt;/// use monte_carlo_options_rs::{calculate_gamma, monte_carlo_american_call};&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let spot_price = 100.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let strike_price = 110.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let risk_free_rate = 0.05;&lt;/span&gt;
&lt;span class="sd"&gt;/// let volatility = 0.2;&lt;/span&gt;
&lt;span class="sd"&gt;/// let time_to_maturity = 1.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_simulations = 100_000;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_steps = 252;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let gamma = calculate_gamma(&lt;/span&gt;
&lt;span class="sd"&gt;///     spot_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     strike_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     risk_free_rate,&lt;/span&gt;
&lt;span class="sd"&gt;///     volatility,&lt;/span&gt;
&lt;span class="sd"&gt;///     time_to_maturity,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_simulations,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_steps,&lt;/span&gt;
&lt;span class="sd"&gt;/// ).unwrap();&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// println!("Gamma of the American call option: {:.4}", gamma);&lt;/span&gt;
&lt;span class="sd"&gt;/// ```&lt;/span&gt;
&lt;span class="cp"&gt;#[pyfunction]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;calculate_gamma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PyResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;powi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="sd"&gt;/// Calculates the vega of an American call option using the finite difference method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// Vega represents the sensitivity of the option price to changes in the volatility of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Arguments&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// * `spot_price` - The current price of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `strike_price` - The strike price of the option.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `risk_free_rate` - The risk-free interest rate.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `volatility` - The volatility of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `time_to_maturity` - The time to maturity of the option (in years).&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_simulations` - The number of simulations to run for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_steps` - The number of steps in each simulation for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Returns&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// The vega of the American call option.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Example&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// ```rust&lt;/span&gt;
&lt;span class="sd"&gt;/// use monte_carlo_options_rs::{calculate_vega, monte_carlo_american_call};&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let spot_price = 100.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let strike_price = 110.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let risk_free_rate = 0.05;&lt;/span&gt;
&lt;span class="sd"&gt;/// let volatility = 0.2;&lt;/span&gt;
&lt;span class="sd"&gt;/// let time_to_maturity = 1.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_simulations = 100_000;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_steps = 252;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let vega = calculate_vega(&lt;/span&gt;
&lt;span class="sd"&gt;///     spot_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     strike_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     risk_free_rate,&lt;/span&gt;
&lt;span class="sd"&gt;///     volatility,&lt;/span&gt;
&lt;span class="sd"&gt;///     time_to_maturity,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_simulations,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_steps,&lt;/span&gt;
&lt;span class="sd"&gt;/// ).unwrap();&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// println!("Vega of the American call option: {:.4}", vega);&lt;/span&gt;
&lt;span class="sd"&gt;/// ```&lt;/span&gt;
&lt;span class="cp"&gt;#[pyfunction]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;calculate_vega&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PyResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="sd"&gt;/// Calculates the theta of an American call option using the finite difference method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// Theta represents the rate of change of the option price with respect to the passage of time.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Arguments&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// * `spot_price` - The current price of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `strike_price` - The strike price of the option.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `risk_free_rate` - The risk-free interest rate.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `volatility` - The volatility of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `time_to_maturity` - The time to maturity of the option (in years).&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_simulations` - The number of simulations to run for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_steps` - The number of steps in each simulation for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Returns&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// The theta of the American call option (per day).&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Example&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// ```rust&lt;/span&gt;
&lt;span class="sd"&gt;/// use monte_carlo_options_rs::{calculate_theta, monte_carlo_american_call};&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let spot_price = 100.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let strike_price = 110.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let risk_free_rate = 0.05;&lt;/span&gt;
&lt;span class="sd"&gt;/// let volatility = 0.2;&lt;/span&gt;
&lt;span class="sd"&gt;/// let time_to_maturity = 1.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_simulations = 100_000;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_steps = 252;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let theta = calculate_theta(&lt;/span&gt;
&lt;span class="sd"&gt;///     spot_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     strike_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     risk_free_rate,&lt;/span&gt;
&lt;span class="sd"&gt;///     volatility,&lt;/span&gt;
&lt;span class="sd"&gt;///     time_to_maturity,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_simulations,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_steps,&lt;/span&gt;
&lt;span class="sd"&gt;/// ).unwrap();&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// println!("Theta of the American call option (per day): {:.4}", theta);&lt;/span&gt;
&lt;span class="sd"&gt;/// ```&lt;/span&gt;
&lt;span class="cp"&gt;#[pyfunction]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;calculate_theta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PyResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;365.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="sd"&gt;/// Calculates the rho of an American call option using the finite difference method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// Rho represents the sensitivity of the option price to changes in the risk-free interest rate.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Arguments&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// * `spot_price` - The current price of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `strike_price` - The strike price of the option.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `risk_free_rate` - The risk-free interest rate.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `volatility` - The volatility of the underlying asset.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `time_to_maturity` - The time to maturity of the option (in years).&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_simulations` - The number of simulations to run for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `num_steps` - The number of steps in each simulation for the Monte Carlo method.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Returns&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// The rho of the American call option.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Example&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// ```rust&lt;/span&gt;
&lt;span class="sd"&gt;/// use monte_carlo_options_rs::{calculate_rho, monte_carlo_american_call};&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let spot_price = 100.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let strike_price = 110.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let risk_free_rate = 0.05;&lt;/span&gt;
&lt;span class="sd"&gt;/// let volatility = 0.2;&lt;/span&gt;
&lt;span class="sd"&gt;/// let time_to_maturity = 1.0;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_simulations = 100_000;&lt;/span&gt;
&lt;span class="sd"&gt;/// let num_steps = 252;&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// let rho = calculate_rho(&lt;/span&gt;
&lt;span class="sd"&gt;///     spot_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     strike_price,&lt;/span&gt;
&lt;span class="sd"&gt;///     risk_free_rate,&lt;/span&gt;
&lt;span class="sd"&gt;///     volatility,&lt;/span&gt;
&lt;span class="sd"&gt;///     time_to_maturity,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_simulations,&lt;/span&gt;
&lt;span class="sd"&gt;///     num_steps,&lt;/span&gt;
&lt;span class="sd"&gt;/// ).unwrap();&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// println!("Rho of the American call option: {:.4}", rho);&lt;/span&gt;
&lt;span class="sd"&gt;/// ```&lt;/span&gt;
&lt;span class="cp"&gt;#[pyfunction]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;calculate_rho&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;usize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PyResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;f64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spot_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;strike_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;risk_free_rate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;volatility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;time_to_maturity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_simulations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;num_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;price_up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;price_down&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="sd"&gt;/// Initializes the `libmonte_carlo_options_rs` Python module.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// This function is called when the Python module is imported and adds the Rust functions&lt;/span&gt;
&lt;span class="sd"&gt;/// to the module so they can be accessed from Python.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Arguments&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// * `_py` - The Python interpreter.&lt;/span&gt;
&lt;span class="sd"&gt;/// * `m` - The Python module to add the functions to.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Returns&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// `Ok(())` if the module was initialized successfully, or an error if there was a problem.&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Example&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// ```python&lt;/span&gt;
&lt;span class="sd"&gt;/// import libmonte_carlo_options_rs&lt;/span&gt;
&lt;span class="sd"&gt;///&lt;/span&gt;
&lt;span class="sd"&gt;/// # Use the functions from the module&lt;/span&gt;
&lt;span class="sd"&gt;/// price = libmonte_carlo_options_rs.monte_carlo_american_call(...)&lt;/span&gt;
&lt;span class="sd"&gt;/// delta = libmonte_carlo_options_rs.calculate_delta(...)&lt;/span&gt;
&lt;span class="sd"&gt;/// gamma = libmonte_carlo_options_rs.calculate_gamma(...)&lt;/span&gt;
&lt;span class="sd"&gt;/// vega = libmonte_carlo_options_rs.calculate_vega(...)&lt;/span&gt;
&lt;span class="sd"&gt;/// theta = libmonte_carlo_options_rs.calculate_theta(...)&lt;/span&gt;
&lt;span class="sd"&gt;/// rho = libmonte_carlo_options_rs.calculate_rho(...)&lt;/span&gt;
&lt;span class="sd"&gt;/// ```&lt;/span&gt;
&lt;span class="cp"&gt;#[pymodule]&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;libmonte_carlo_options_rs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_py&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;Python&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;'&lt;/span&gt;&lt;span class="nb"&gt;_&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;PyModule&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;PyResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wrap_pyfunction&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wrap_pyfunction&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;monte_carlo_american_put&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wrap_pyfunction&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;calculate_delta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wrap_pyfunction&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;calculate_gamma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wrap_pyfunction&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;calculate_vega&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wrap_pyfunction&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;calculate_theta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wrap_pyfunction&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;calculate_rho&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(())&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>monte carlo simulations</category><category>options pricing</category><guid>https://tinycomputers.io/posts/monte-carlo-method-of-pricing-options.html</guid><pubDate>Wed, 19 Jun 2024 19:06:04 GMT</pubDate></item></channel></rss>