- Introduction
- Features
- Core Modules
- Trading Strategies
- Setup Instructions
- Library Usage
- Usage Examples
- Testing
- Contribution and Contact
OptionStratLib is a comprehensive Rust library for options trading and strategy development across multiple asset classes. This versatile toolkit enables traders, quants, and developers to model, analyze, and visualize options strategies with a robust, type-safe approach. The library focuses on precision with decimal-based calculations, extensive test coverage, and a modular architecture built on modern Rust 2024 edition.
- Black-Scholes Model: European options pricing with full Greeks support
- Binomial Tree Model: American and European options with early exercise capability
- Monte Carlo Simulations: Complex pricing scenarios and path-dependent options
- Telegraph Process Model: Advanced stochastic modeling for jump-diffusion processes
- Complete Greeks suite: Delta, Gamma, Theta, Vega, Rho
- Real-time sensitivity analysis
- Greeks visualization and risk profiling
- Custom Greeks implementations with adjustable parameters
- Implied volatility calculation using Newton-Raphson method
- Volatility surface construction and interpolation
- Historical volatility estimation
- Advanced volatility modeling tools
- Complete option chain construction and analysis
- Strike price generation algorithms
- Chain data import/export (CSV/JSON formats)
- Advanced filtering and selection tools
- Option data grouping and organization
- Single Leg: Long/Short Calls and Puts
- Spreads: Bull/Bear Call/Put Spreads
- Butterflies: Long/Short Butterfly Spreads, Call Butterfly
- Complex: Iron Condor, Iron Butterfly
- Volatility: Long/Short Straddles and Strangles
- Income: Covered Calls, Poor Man's Covered Call
- Protection: Protective Puts, Collars
- Custom: Flexible custom strategy framework
- Position tracking and management
- Break-even analysis with multiple break-even points
- Profit/Loss calculations at various price points
- Risk profiles and comprehensive visualizations
- Delta neutrality analysis and adjustment
- Probability analysis for strategy outcomes
- Comprehensive backtesting engine
- Performance metrics calculation
- Strategy optimization tools
- Historical analysis capabilities
- Monte Carlo simulations for strategy testing
- Telegraph process implementation
- Random walk simulations
- Custom simulation frameworks
- Parametrized simulations with adjustable inputs
- Strategy payoff diagrams
- Greeks visualization
- 3D volatility surfaces
- Risk profiles and P&L charts
- Interactive charts (powered by
plotly.rs
) - Binomial tree visualization
- Comprehensive plotting utilities
- Efficient decimal-based calculations using
rust_decimal
- CSV/JSON import/export functionality
- Time series data handling
- Price series management and manipulation
- Robust data validation and error handling
- Curve interpolation techniques
- Surface construction and analysis
- Geometric operations for financial modeling
- Advanced mathematical utilities for options pricing
The library is organized into the following key modules:
Core data structures and types for options trading:
option.rs
: Complete option structures with pricing and Greeksposition.rs
: Position management and P&L trackingexpiration.rs
: Flexible expiration date handling (Days/DateTime)positive.rs
: Type-safe positive number implementationtypes.rs
: Common enums (OptionType, Side, OptionStyle)trade.rs
: Trade execution and managementformat.rs
: Data formatting utilities
Advanced pricing engines for options valuation:
black_scholes_model.rs
: European options pricing with Greeksbinomial_model.rs
: American/European options with early exercisemonte_carlo.rs
: Path-dependent and exotic options pricingtelegraph.rs
: Jump-diffusion process modelingpayoff.rs
: Payoff function implementations
Comprehensive trading strategy implementations:
base.rs
: Core traits (Strategable, BasicAble, Positionable, etc.)- Single Leg:
long_call.rs
,short_call.rs
,long_put.rs
,short_put.rs
- Spreads:
bull_call_spread.rs
,bear_call_spread.rs
,bull_put_spread.rs
,bear_put_spread.rs
- Butterflies:
long_butterfly_spread.rs
,short_butterfly_spread.rs
,call_butterfly.rs
- Complex:
iron_condor.rs
,iron_butterfly.rs
- Volatility:
long_straddle.rs
,short_straddle.rs
,long_strangle.rs
,short_strangle.rs
- Income:
covered_call.rs
,poor_mans_covered_call.rs
- Protection:
protective_put.rs
,collar.rs
custom.rs
: Flexible custom strategy frameworkprobabilities/
: Probability analysis for strategy outcomesdelta_neutral/
: Delta neutrality analysis and adjustment
Volatility modeling and analysis:
utils.rs
: Implied volatility calculation (Newton-Raphson method)traits.rs
: Volatility model interfaces- Advanced volatility surface construction
Complete Greeks calculation suite:
- Delta, Gamma, Theta, Vega, Rho calculations
- Real-time sensitivity analysis
- Greeks-based risk management
Option chain management and analysis:
chain.rs
: Option chain construction and manipulationutils.rs
: Chain analysis and filtering tools- CSV/JSON import/export functionality
- Strike price generation algorithms
Strategy performance analysis:
metrics.rs
: Performance metrics calculationresults.rs
: Backtesting results managementtypes.rs
: Backtesting data structures
Monte Carlo and stochastic simulations:
- Random walk implementations
- Telegraph process modeling
- Custom simulation frameworks
- Parametrized simulation tools
Comprehensive plotting and charting:
plotly.rs
: Interactive charts with Plotly integration- Strategy payoff diagrams
- Greeks visualization
- 3D volatility surfaces
- Risk profile charts
Risk analysis and management tools:
- Position risk metrics
- Break-even analysis
- Risk profile generation
Profit and loss calculation:
- Real-time P&L tracking
- Historical P&L analysis
- Performance attribution
Mathematical tools for financial modeling:
- Curve interpolation techniques
- Surface construction and analysis
- 3D visualization capabilities
Robust error management:
- Comprehensive error types for each module
- Type-safe error propagation
- Detailed error reporting
classDiagram
class Options {
+option_type: OptionType
+side: Side
+underlying_symbol: String
+strike_price: Positive
+expiration_date: ExpirationDate
+implied_volatility: Positive
+quantity: Positive
+underlying_price: Positive
+risk_free_rate: Decimal
+option_style: OptionStyle
+dividend_yield: Positive
+exotic_params: Option~ExoticParams~
+calculate_price_black_scholes()
+calculate_price_binomial()
+time_to_expiration()
+is_long()
+is_short()
+validate()
+to_plot()
+calculate_implied_volatility()
+delta()
+gamma()
+theta()
+vega()
+rho()
}
class Position {
+option: Options
+position_cost: Positive
+entry_date: DateTime<Utc>
+open_fee: Positive
+close_fee: Positive
+net_cost()
+net_premium_received()
+unrealized_pnl()
+pnl_at_expiration()
+validate()
}
class ExpirationDate {
+Days(Positive)
+Date(NaiveDate)
+get_years()
+get_date()
+get_date_string()
+from_string()
}
class Positive {
+value: Decimal
+ZERO: Positive
+ONE: Positive
+format_fixed_places()
+round_to_nice_number()
+is_positive()
}
class OptionStyle {
<<enumeration>>
Call
Put
}
class OptionType {
<<enumeration>>
European
American
}
class Side {
<<enumeration>>
Long
Short
}
class Graph {
<<interface>>
+graph_data()
+graph_config()
+to_plot()
+write_html()
+write_png()
+write_svg()
+write_jpeg()
}
class Greeks {
<<interface>>
+delta()
+gamma()
+theta()
+vega()
+rho()
+calculate_all_greeks()
}
Options --|> Greeks : implements
Options --|> Graph : implements
Position o-- Options : contains
Options *-- OptionStyle : has
Options *-- OptionType : has
Options *-- Side : has
Options *-- ExpirationDate : has
Options *-- Positive : uses
OptionStratLib provides 25+ comprehensive trading strategies organized by complexity and market outlook:
Basic directional strategies for beginners:
- Long Call: Bullish strategy with unlimited upside potential
- Short Call: Bearish strategy collecting premium with limited profit
- Long Put: Bearish strategy with high profit potential
- Short Put: Bullish strategy collecting premium with assignment risk
Defined risk strategies with limited profit/loss:
- Bull Call Spread: Moderately bullish with limited risk and reward
- Bear Call Spread: Moderately bearish credit spread
- Bull Put Spread: Moderately bullish credit spread
- Bear Put Spread: Moderately bearish debit spread
Market neutral strategies profiting from low volatility:
- Long Butterfly Spread: Profits from price staying near middle strike
- Short Butterfly Spread: Profits from price moving away from middle strike
- Call Butterfly: Butterfly using only call options
Advanced strategies for experienced traders:
- Iron Condor: Market neutral strategy with wide profit zone
- Iron Butterfly: Market neutral strategy with narrow profit zone
Strategies that profit from volatility changes:
- Long Straddle: Profits from high volatility in either direction
- Short Straddle: Profits from low volatility (range-bound market)
- Long Strangle: Similar to straddle but with different strikes
- Short Strangle: Credit strategy profiting from low volatility
Strategies focused on generating regular income:
- Covered Call: Stock ownership with call selling for income
- Poor Man's Covered Call: LEAPS-based covered call alternative
Risk management and hedging strategies:
- Protective Put: Downside protection for stock positions
- Collar: Combination of covered call and protective put
- Custom Strategy: Flexible framework for creating any multi-leg strategy
- Supports unlimited number of legs
- Full integration with all analysis tools
- Complete trait implementation for consistency
All strategies include comprehensive analysis capabilities:
- Profit/Loss Analysis: P&L at any price point and time
- Break-Even Points: Multiple break-even calculations
- Greeks Analysis: Real-time risk metrics
- Probability Analysis: Success probability calculations
- Delta Neutrality: Delta-neutral position analysis
- Visualization: Interactive payoff diagrams and risk profiles
- Optimization: Find optimal strikes and expirations
All strategies implement a comprehensive trait system:
- Strategable: Master trait combining all strategy capabilities
- BasicAble: Basic strategy information (symbol, price, etc.)
- Positionable: Position management and modification
- Strategies: Core strategy calculations (P&L, break-even, etc.)
- Validable: Strategy validation and error checking
- BreakEvenable: Break-even point calculations
- Profit: Profit/loss analysis at various price points
- Greeks: Greeks calculations for risk management
- DeltaNeutrality: Delta-neutral analysis and adjustments
- ProbabilityAnalysis: Outcome probability calculations
- Graph: Visualization and plotting capabilities
- Rust 1.80 or higher (2024 edition)
- Cargo package manager
Add OptionStratLib to your Cargo.toml
:
[dependencies]
optionstratlib = "0.6.1"
Or use cargo to add it to your project:
cargo add optionstratlib
The library includes optional features for enhanced functionality:
[dependencies]
optionstratlib = { version = "0.6.1", features = ["plotly"] }
plotly
: Enables interactive visualization using plotly.rs
Clone the repository and build using Cargo:
git clone https://github.com/joaquinbejar/OptionStratLib.git
cd OptionStratLib
cargo build --release
Run comprehensive test suite:
cargo test --all-features
Generate documentation:
cargo doc --open --all-features
Run benchmarks:
cargo bench
use optionstratlib::{Options, OptionStyle, OptionType, Side, ExpirationDate};
use optionstratlib::pos;
use rust_decimal_macros::dec;
use optionstratlib::greeks::Greeks;
// Create a European call option
let option = Options::new(
OptionType::European,
Side::Long,
"AAPL".to_string(),
pos!(150.0), // strike_price
ExpirationDate::Days(pos!(30.0)),
pos!(0.25), // implied_volatility
pos!(1.0), // quantity
pos!(155.0), // underlying_price
dec!(0.05), // risk_free_rate
OptionStyle::Call,
pos!(0.02), // dividend_yield
None, // exotic_params
);
// Calculate option price using Black-Scholes
let price = option.calculate_price_black_scholes().unwrap();
println!("Option price: ${:.2}", price);
// Calculate Greeks for risk management
let delta = option.delta().unwrap();
let gamma = option.gamma().unwrap();
let theta = option.theta().unwrap();
let vega = option.vega().unwrap();
println!("Greeks - Delta: {:.4}, Gamma: {:.4}, Theta: {:.4}, Vega: {:.4}",
delta, gamma, theta, vega);
use optionstratlib::{Positive, ExpirationDate, pos};
use optionstratlib::strategies::Strategies;
use optionstratlib::strategies::bull_call_spread::BullCallSpread;
use optionstratlib::strategies::base::{BreakEvenable, BasicAble};
use optionstratlib::visualization::Graph;
use rust_decimal_macros::dec;
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
let underlying_price = pos!(100.0);
// Create a Bull Call Spread strategy
let strategy = BullCallSpread::new(
"AAPL".to_string(),
underlying_price,
pos!(95.0), // long_strike
pos!(105.0), // short_strike
ExpirationDate::Days(pos!(30.0)),
pos!(0.25), // implied_volatility
dec!(0.05), // risk_free_rate
pos!(2.50), // long_call_premium
pos!(2.50), // long_call_open_fee
pos!(1.20), // short_call_premium
pos!(1.20), // short_call_close_fee
Default::default(), Default::default(),
Default::default(), Default::default()
);
// Analyze the strategy
println!("Strategy: {}", strategy.get_title());
println!("Break-even points: {:?}", strategy.get_break_even_points()?);
println!("Max profit: ${:.2}", strategy.get_max_profit().unwrap_or(Positive::ZERO));
println!("Max loss: ${:.2}", strategy.get_max_loss().unwrap_or(Positive::ZERO));
println!("Net premium: ${:.2}", strategy.get_net_premium_received()?);
// Calculate P&L at different price points
let prices = vec![pos!(90.0), pos!(95.0), pos!(100.0), pos!(105.0), pos!(110.0)];
for price in prices {
let pnl = strategy.get_profit_loss_at_price(price)?;
println!("P&L at ${}: ${:.2}", price, pnl);
}
// Generate visualization
#[cfg(feature = "plotly")]
{
strategy.write_html("bull_call_spread.html".as_ref())?;
}
Ok(())
}
use optionstratlib::volatility::utils::implied_volatility;
use optionstratlib::{OptionStyle, OptionType};
use rust_decimal_macros::dec;
use optionstratlib::pos;
// Calculate implied volatility from market price
let market_price = dec!(5.50);
let underlying_price = dec!(100.0);
let strike_price = dec!(105.0);
let time_to_expiration = dec!(0.25); // 3 months
let risk_free_rate = dec!(0.05);
let dividend_yield = dec!(0.02);
let iv = implied_volatility(
market_price,
underlying_price,
strike_price,
time_to_expiration,
risk_free_rate,
dividend_yield,
OptionType::European,
OptionStyle::Call,
).unwrap();
println!("Implied Volatility: {:.2}%", iv * dec!(100));
use optionstratlib::strategies::custom::CustomStrategy;
use optionstratlib::strategies::Strategies;
use optionstratlib::{Options, OptionStyle, OptionType, Side, ExpirationDate, pos};
use rust_decimal_macros::dec;
// Create a custom Iron Condor using the flexible framework
let mut custom_strategy = CustomStrategy::new(
"Custom Iron Condor".to_string(),
"AAPL".to_string(),
"Custom 4-leg Iron Condor strategy".to_string(),
pos!(150.0), // underlying_price
);
// Add the four legs of an Iron Condor
// Long Put (lower strike)
custom_strategy.add_option(Options::new(
OptionType::European, Side::Long, "AAPL".to_string(),
pos!(140.0), ExpirationDate::Days(pos!(30.0)), pos!(0.25),
pos!(1.0), pos!(150.0), dec!(0.05), OptionStyle::Put,
pos!(0.02), None
)).unwrap();
// Short Put (higher strike)
custom_strategy.add_option(Options::new(
OptionType::European, Side::Short, "AAPL".to_string(),
pos!(145.0), ExpirationDate::Days(pos!(30.0)), pos!(0.25),
pos!(1.0), pos!(150.0), dec!(0.05), OptionStyle::Put,
pos!(0.02), None
)).unwrap();
// Short Call (lower strike)
custom_strategy.add_option(Options::new(
OptionType::European, Side::Short, "AAPL".to_string(),
pos!(155.0), ExpirationDate::Days(pos!(30.0)), pos!(0.25),
pos!(1.0), pos!(150.0), dec!(0.05), OptionStyle::Call,
pos!(0.02), None
)).unwrap();
// Long Call (higher strike)
custom_strategy.add_option(Options::new(
OptionType::European, Side::Long, "AAPL".to_string(),
pos!(160.0), ExpirationDate::Days(pos!(30.0)), pos!(0.25),
pos!(1.0), pos!(150.0), dec!(0.05), OptionStyle::Call,
pos!(0.02), None
)).unwrap();
// Analyze the custom strategy
println!("Max Profit: ${:.2}", custom_strategy.get_max_profit().unwrap_or(pos!(0.0)));
println!("Max Loss: ${:.2}", custom_strategy.get_max_loss().unwrap_or(pos!(0.0)));
OptionStratLib includes a comprehensive test suite with over 1000 unit and integration tests:
Run all tests:
cargo test --all-features
Run tests for specific modules:
cargo test strategies::bull_call_spread
cargo test pricing::black_scholes
cargo test volatility::utils
Run tests with output:
cargo test -- --nocapture
- Unit Tests: Individual function and method testing
- Integration Tests: Cross-module functionality testing
- Strategy Tests: Comprehensive strategy validation
- Pricing Model Tests: Accuracy and performance testing
- Greeks Tests: Mathematical precision validation
- Visualization Tests: Chart generation and export testing
Run performance benchmarks:
cargo bench
Generate test coverage report:
cargo tarpaulin --all-features --out Html
The library includes extensive examples organized by functionality:
examples/examples_strategies/
: Complete strategy examples (25+ strategies)examples/examples_chains/
: Option chain analysis examplesexamples/examples_pricing/
: Pricing model demonstrationsexamples/examples_visualization/
: Interactive chart examplesexamples/examples_volatility/
: Volatility analysis examplesexamples/examples_simulation/
: Monte Carlo and simulation examples
Run examples:
cargo run --example bull_call_spread --features plotly
cargo run --example black_scholes_pricing
cargo run --example volatility_surface
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to the branch:
git push origin feature/amazing-feature
- Open a Pull Request
git clone https://github.com/joaquinbejar/OptionStratLib.git
cd OptionStratLib
cargo build --all-features
cargo test --all-features
- All code must pass
cargo clippy
without warnings - Format code with
cargo fmt
- Add tests for new functionality
- Update documentation for API changes
- Follow Rust 2024 edition best practices
- Author: Joaquín Béjar García
- Email: jb@taunais.com
- Repository: https://github.com/joaquinbejar/OptionStratLib
- Documentation: https://docs.rs/optionstratlib
- License: MIT
- Issues: Report bugs and request features on GitHub
- Discussions: Join community discussions on GitHub Discussions
- Documentation: Comprehensive docs available at docs.rs
OptionStratLib v0.6.1 - Built with ❤️ in Rust for the financial community
We welcome contributions to this project! If you would like to contribute, please follow these steps:
- Fork the repository.
- Create a new branch for your feature or bug fix.
- Make your changes and ensure that the project still builds and all tests pass.
- Commit your changes and push your branch to your forked repository.
- Submit a pull request to the main repository.
If you have any questions, issues, or would like to provide feedback, please feel free to contact the project maintainer:
Joaquín Béjar García
- Email: jb@taunais.com
- GitHub: joaquinbejar
We appreciate your interest and look forward to your contributions!
Licensed under MIT license