{"id":29602093,"url":"https://github.com/joaquinbejar/optionstratlib","last_synced_at":"2026-04-26T10:02:22.669Z","repository":{"id":251223241,"uuid":"836587243","full_name":"joaquinbejar/OptionStratLib","owner":"joaquinbejar","description":"OptionStratLib is a comprehensive Rust library for options trading and strategy development across multiple asset classes.","archived":false,"fork":false,"pushed_at":"2026-04-19T22:00:17.000Z","size":89379,"stargazers_count":192,"open_issues_count":2,"forks_count":33,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-04-19T23:38:32.612Z","etag":null,"topics":["black-scholes","black-scholes-model-application","derivatives","finance","financial-analysis","financial-engineering","heston-model","option","option-pricing","options","options-trading","quantitative-finance","rust","simulation","trading","trading-algorithms","trading-strategies","volatility"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joaquinbejar.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-01T06:55:25.000Z","updated_at":"2026-04-19T22:00:06.000Z","dependencies_parsed_at":"2026-02-19T18:03:26.260Z","dependency_job_id":null,"html_url":"https://github.com/joaquinbejar/OptionStratLib","commit_stats":null,"previous_names":["joaquinbejar/optionstratlib"],"tags_count":61,"template":false,"template_full_name":null,"purl":"pkg:github/joaquinbejar/OptionStratLib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaquinbejar%2FOptionStratLib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaquinbejar%2FOptionStratLib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaquinbejar%2FOptionStratLib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaquinbejar%2FOptionStratLib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joaquinbejar","download_url":"https://codeload.github.com/joaquinbejar/OptionStratLib/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaquinbejar%2FOptionStratLib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32292958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["black-scholes","black-scholes-model-application","derivatives","finance","financial-analysis","financial-engineering","heston-model","option","option-pricing","options","options-trading","quantitative-finance","rust","simulation","trading","trading-algorithms","trading-strategies","volatility"],"created_at":"2025-07-20T13:37:53.265Z","updated_at":"2026-04-26T10:02:22.657Z","avatar_url":"https://github.com/joaquinbejar.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv style=\"text-align: center;\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/joaquinbejar/OptionStratLib/refs/heads/main/doc/images/logo.png\" alt=\"OptionStratLib\" style=\"width: 100%; height: 100%;\"\u003e\n\u003c/div\u003e\n\n[![Dual License](https://img.shields.io/badge/license-MIT%20and%20Apache%202.0-blue)](./LICENSE)\n[![Crates.io](https://img.shields.io/crates/v/optionstratlib.svg)](https://crates.io/crates/optionstratlib)\n[![Downloads](https://img.shields.io/crates/d/optionstratlib.svg)](https://crates.io/crates/optionstratlib)\n[![Stars](https://img.shields.io/github/stars/joaquinbejar/OptionStratLib.svg)](https://github.com/joaquinbejar/OptionStratLib/stargazers)\n[![Issues](https://img.shields.io/github/issues/joaquinbejar/OptionStratLib.svg)](https://github.com/joaquinbejar/OptionStratLib/issues)\n[![PRs](https://img.shields.io/github/issues-pr/joaquinbejar/OptionStratLib.svg)](https://github.com/joaquinbejar/OptionStratLib/pulls)\n[![Build Status](https://img.shields.io/github/workflow/status/joaquinbejar/OptionStratLib/CI)](https://github.com/joaquinbejar/OptionStratLib/actions)\n[![Coverage](https://img.shields.io/codecov/c/github/joaquinbejar/OptionStratLib)](https://codecov.io/gh/joaquinbejar/OptionStratLib)\n[![Dependencies](https://img.shields.io/librariesio/github/joaquinbejar/OptionStratLib)](https://libraries.io/github/joaquinbejar/OptionStratLib)\n[![Documentation](https://img.shields.io/badge/docs-latest-blue.svg)](https://docs.rs/optionstratlib)\n[![Wiki](https://img.shields.io/badge/wiki-latest-blue.svg)](https://deepwiki.com/joaquinbejar/OptionStratLib)\n\n\n## OptionStratLib v0.16.5: Financial Options Library\n\n### Table of Contents\n1. [Introduction](#introduction)\n2. [Features](#features)\n3. [Core Modules](#core-modules)\n4. [Trading Strategies](#trading-strategies)\n5. [Setup Instructions](#setup-instructions)\n6. [Library Usage](#library-usage)\n7. [Usage Examples](#usage-examples)\n8. [Testing](#testing)\n9. [Contribution and Contact](#contribution-and-contact)\n\n### Introduction\n\nOptionStratLib is a comprehensive Rust library for options trading and strategy development across multiple asset classes.\nThis versatile toolkit enables traders, quants, and developers to model, analyze, and visualize options strategies with a\nrobust, type-safe approach. The library focuses on precision with decimal-based calculations, extensive test coverage,\nand a modular architecture built on modern Rust 2024 edition.\n\n### Features\n\n#### 1. **Pricing Models**\n- **Black-Scholes Model**: European options pricing with full Greeks support\n- **Binomial Tree Model**: American and European options with early exercise capability\n- **Monte Carlo Simulations**: Complex pricing scenarios and path-dependent options\n- **Telegraph Process Model**: Advanced stochastic modeling for jump-diffusion processes\n- **American Options**: Barone-Adesi-Whaley approximation for early exercise\n- **Exotic Options**: Complete support for 14 exotic option types (see below)\n\n#### 2. **Greeks Calculation**\n- Complete Greeks suite: Delta, Gamma, Theta, Vega, Rho, Vanna, Vomma, Veta,\n  Charm, Color\n- Real-time sensitivity analysis\n- Greeks visualization and risk profiling\n- Custom Greeks implementations with adjustable parameters\n\n#### 3. **Volatility Models**\n- Implied volatility calculation using Newton-Raphson method\n- Volatility surface construction and interpolation\n- Historical volatility estimation\n- Advanced volatility modeling tools\n\n#### 4. **Option Chain Management**\n- Complete option chain construction and analysis\n- Strike price generation algorithms\n- Chain data import/export (CSV/JSON formats)\n- Advanced filtering and selection tools\n- Option data grouping and organization\n\n#### 5. **Trading Strategies (25+ Strategies)**\n- **Single Leg**: Long/Short Calls and Puts\n- **Spreads**: Bull/Bear Call/Put Spreads\n- **Butterflies**: Long/Short Butterfly Spreads, Call Butterfly\n- **Complex**: Iron Condor, Iron Butterfly\n- **Volatility**: Long/Short Straddles and Strangles\n- **Income**: Covered Calls (with spot leg support), Poor Man's Covered Call\n- **Protection**: Protective Puts, Collars\n- **Custom**: Flexible custom strategy framework\n- **Multi-Asset**: Strategies combining options with spot, futures, or perpetuals\n\n#### 6. **Risk Management \u0026 Analysis**\n- Position tracking and management\n- Break-even analysis with multiple break-even points\n- Profit/Loss calculations at various price points\n- Risk profiles and comprehensive visualizations\n- Delta neutrality analysis and adjustment\n- Probability analysis for strategy outcomes\n\n#### 7. **Backtesting Framework**\n- Comprehensive backtesting engine\n- Performance metrics calculation\n- Strategy optimization tools\n- Historical analysis capabilities\n\n#### 8. **Simulation Tools**\n- Monte Carlo simulations for strategy testing\n- Telegraph process implementation\n- Random walk simulations\n- Custom simulation frameworks\n- Parametrized simulations with adjustable inputs\n\n#### 9. **Visualization \u0026 Plotting**\n- Strategy payoff diagrams\n- Greeks visualization\n- 3D volatility surfaces\n- Risk profiles and P\u0026L charts\n- Interactive charts (powered by `plotly.rs`)\n- Binomial tree visualization\n- Comprehensive plotting utilities\n\n#### 10. **Data Management**\n- Efficient decimal-based calculations using `rust_decimal`\n- CSV/JSON import/export functionality\n- Time series data handling\n- Price series management and manipulation\n- Robust data validation and error handling\n\n#### 11. **Mathematical Tools**\n- Curve interpolation techniques\n- Surface construction and analysis\n- Geometric operations for financial modeling\n- Advanced mathematical utilities for options pricing\n\n#### 12. **Exotic Option Pricing**\nComplete pricing support for all exotic option types:\n- **Asian**: Arithmetic and geometric average price options\n- **Barrier**: Up/Down, In/Out barrier options with rebates\n- **Binary**: Cash-or-nothing and asset-or-nothing options\n- **Lookback**: Fixed and floating strike lookback options\n- **Compound**: Options on options\n- **Chooser**: Options to choose call or put at future date\n- **Cliquet**: Forward-starting options with local caps/floors\n- **Rainbow**: Multi-asset best-of/worst-of options\n- **Spread**: Kirk's approximation for price differentials\n- **Quanto**: Currency-protected options\n- **Exchange**: Margrabe's formula for asset exchange\n- **Power**: Non-linear payoff options\n\n### Quality \u0026 Discipline (0.16.x)\n\nThe 0.16 line is a quality-hardening release. Every change below is\nenforced crate-wide and documented in `CHANGELOG.md`:\n\n- **Checked `Decimal` arithmetic.** Every monetary-path kernel routes\n  through `d_add` / `d_sub` / `d_mul` / `d_div` / `d_sum` /\n  `d_sum_iter` in `model::decimal`. Overflow on any monetary\n  expression surfaces `DecimalError::Overflow { operation, lhs, rhs }`\n  tagged with a static call-site string; no silent wraparound.\n- **Non-finite `f64` guards.** Every `f64 → Decimal` boundary inside\n  pricing, Greeks, volatility, and simulation is wrapped with\n  `finite_decimal(..)` and surfaces a domain-specific\n  `NonFinite { context, value }` variant\n  (`PricingError`, `GreeksError`, `VolatilityError`,\n  `SimulationError`) instead of collapsing silently to\n  `Decimal::ZERO`.\n- **`NonZeroUsize` step counts.** `price_binomial`,\n  `monte_carlo_option_pricing`, `telegraph` and related kernels take\n  `std::num::NonZeroUsize` for `steps` / `simulations`; zero is\n  structurally invalid at the type level. Use the `nz!(N)` macro\n  at literal call sites.\n- **`Positive` at every public boundary.** Monetary values,\n  strikes, quantities, volatilities are `Positive` (newtype around\n  `Decimal`). Strategy-level P\u0026L goes through\n  `Positive::new_decimal(..)` at every point where a signed\n  `Decimal` would otherwise be clamped to `Positive`, so inverted\n  strikes or out-of-range optimizer candidates return typed\n  `StrategyError` rather than panicking.\n- **Zero unchecked indexing in production code.**\n  `#![deny(clippy::indexing_slicing)]` is enforced crate-wide with\n  scoped, documented escapes per module. Tests stay permissive via\n  `#![cfg_attr(test, allow(..))]`. Production paths use\n  `.get(..).ok_or_else(..)` with typed errors.\n- **Doc coverage floor.** `#![deny(missing_docs,\n  rustdoc::broken_intra_doc_links)]`. Every `pub` item has a `///`\n  summary; every `Result` returner documents its `# Errors`\n  contract.\n- **Structured tracing.** `#[tracing::instrument]` on the public\n  hot paths: `pricing::black_scholes`,\n  `pricing::monte_carlo_option_pricing`,\n  `pricing::price_binomial`, `volatility::implied_volatility`,\n  and the strategy optimizer entry points\n  `get_best_ratio` / `get_best_area`. No `println!` / `eprintln!`\n  / `dbg!` / `log::` anywhere in `src/`.\n- **Compiler-attribute discipline.** `#[must_use]` on every pure\n  function and builder, `#[inline]` on small hot-path helpers,\n  `#[cold] #[inline(never)]` on every error constructor,\n  `#[repr(u8)]` on small stable enums, canonical `#[derive]`\n  ordering.\n- **Deterministic simulation tests.** `utils::deterministic_rng(seed)`\n  provides a canonical seeded `StdRng` for Monte-Carlo / simulation\n  tests, so precision shifts in upstream arithmetic cannot flip\n  assertions by luck.\n- **Pricing-identity regression tests.** `tests/unit/pricing/identities_test.rs`\n  locks put-call parity on a grid, CRR binomial convergence to\n  Black-Scholes, and the Greek sanity identities\n  (`Γ_c = Γ_p`, `Vega_c = Vega_p`, `Δ_c − Δ_p ≈ e^{-qT}`).\n\n#### Arithmetic-Error Cascade\n\n```mermaid\nflowchart LR\n    subgraph Kernels[\"Numeric kernels (model / pricing / greeks / volatility / simulation)\"]\n        DADD[\"d_add / d_sub / d_mul / d_div\"]\n        DSUM[\"d_sum / d_sum_iter\"]\n        FD[\"finite_decimal(f64)\"]\n    end\n\n    subgraph Errors[\"Typed errors (error/*)\"]\n        DOV[\"DecimalError::Overflow { operation, lhs, rhs }\"]\n        PNF[\"PricingError::NonFinite { context, value }\"]\n        GNF[\"GreeksError::NonFinite\"]\n        VNF[\"VolatilityError::NonFinite\"]\n        SNF[\"SimulationError::NonFinite\"]\n    end\n\n    DADD -- \"checked_*\" --\u003e DOV\n    DSUM -- \"checked_*\" --\u003e DOV\n    FD -- \"NaN / ±∞ guard\" --\u003e PNF\n    FD --\u003e GNF\n    FD --\u003e VNF\n    FD --\u003e SNF\n\n    DOV -- \"#[from]\" --\u003e PNF\n    DOV -- \"#[from]\" --\u003e GNF\n    DOV -- \"#[from]\" --\u003e VNF\n    DOV -- \"#[from]\" --\u003e SNF\n```\n\n\n### Core Modules\n\nThe library is organized into the following key modules:\n\n#### **Model** (`model/`)\nCore data structures and types for options trading:\n- `option.rs`: Complete option structures with pricing and Greeks\n- `position.rs`: Position management and P\u0026L tracking\n- `expiration.rs`: Flexible expiration date handling (Days/DateTime)\n- `positive.rs`: Type-safe positive number implementation\n- `types.rs`: Common enums (OptionType, Side, OptionStyle)\n- `trade.rs`: Trade execution and management\n- `format.rs`: Data formatting utilities\n- **`leg/`**: Multi-instrument leg support for strategies\n  - `traits.rs`: Common leg traits (`LegAble`, `Marginable`, `Fundable`, `Expirable`)\n  - `spot.rs`: `SpotPosition` for underlying asset positions\n  - `perpetual.rs`: `PerpetualPosition` for crypto perpetual swaps\n  - `future.rs`: `FuturePosition` for exchange-traded futures\n  - `leg_enum.rs`: `Leg` enum unifying all position types\n\n#### **Pricing Models** (`pricing/`)\nAdvanced pricing engines for options valuation:\n- `black_scholes_model.rs`: European options pricing with Greeks\n- `binomial_model.rs`: American/European options with early exercise\n- `monte_carlo.rs`: Path-dependent and exotic options pricing\n- `telegraph.rs`: Jump-diffusion process modeling\n- `payoff.rs`: Payoff function implementations\n- `american.rs`: Barone-Adesi-Whaley approximation\n- **Exotic Options**:\n  - `asian.rs`: Asian option pricing\n  - `barrier.rs`: Barrier option pricing\n  - `binary.rs`: Binary/Digital option pricing\n  - `lookback.rs`: Lookback option pricing\n  - `compound.rs`: Compound option pricing\n  - `chooser.rs`: Chooser option pricing\n  - `cliquet.rs`: Cliquet option pricing\n  - `rainbow.rs`: Rainbow option pricing\n  - `spread.rs`: Spread option pricing\n  - `quanto.rs`: Quanto option pricing\n  - `exchange.rs`: Exchange option pricing\n  - `power.rs`: Power option pricing\n\n#### **Strategies** (`strategies/`)\nComprehensive trading strategy implementations:\n- `base.rs`: Core traits (Strategable, BasicAble, Positionable, etc.)\n- **Single Leg**: `long_call.rs`, `short_call.rs`, `long_put.rs`, `short_put.rs`\n- **Spreads**: `bull_call_spread.rs`, `bear_call_spread.rs`, `bull_put_spread.rs`, `bear_put_spread.rs`\n- **Butterflies**: `long_butterfly_spread.rs`, `short_butterfly_spread.rs`, `call_butterfly.rs`\n- **Complex**: `iron_condor.rs`, `iron_butterfly.rs`\n- **Volatility**: `long_straddle.rs`, `short_straddle.rs`, `long_strangle.rs`, `short_strangle.rs`\n- **Income**: `covered_call.rs`, `poor_mans_covered_call.rs`\n- **Protection**: `protective_put.rs`, `collar.rs`\n- `custom.rs`: Flexible custom strategy framework\n- `probabilities/`: Probability analysis for strategy outcomes\n- `delta_neutral/`: Delta neutrality analysis and adjustment\n\n#### **Volatility** (`volatility/`)\nVolatility modeling and analysis:\n- `utils.rs`: Implied volatility calculation (Newton-Raphson method)\n- `traits.rs`: Volatility model interfaces\n- Advanced volatility surface construction\n\n#### **Greeks** (`greeks/`)\nComplete Greeks calculation suite:\n- Delta, Gamma, Theta, Vega, Rho, Vanna, Vomma, Veta, Charm, Color calculations\n- Real-time sensitivity analysis\n- Greeks-based risk management\n\n#### **Chains** (`chains/`)\nOption chain management and analysis:\n- `chain.rs`: Option chain construction and manipulation\n- `utils.rs`: Chain analysis and filtering tools\n- CSV/JSON import/export functionality\n- Strike price generation algorithms\n\n#### **Backtesting** (`backtesting/`)\nStrategy performance analysis:\n- `metrics.rs`: Performance metrics calculation\n- `results.rs`: Backtesting results management\n- `types.rs`: Backtesting data structures\n\n#### **Simulation** (`simulation/`)\nMonte Carlo and stochastic simulations:\n- Random walk implementations\n- Telegraph process modeling\n- Custom simulation frameworks\n- Parametrized simulation tools\n\n#### **Visualization** (`visualization/`)\nComprehensive plotting and charting:\n- `plotly.rs`: Interactive charts with Plotly integration\n- Strategy payoff diagrams\n- Greeks visualization\n- 3D volatility surfaces\n- Risk profile charts\n\n#### **Metrics** (`metrics/`)\nPerformance, risk, and liquidity metrics analysis:\n- **Price Metrics**: Volatility skew curves\n- **Risk Metrics**:\n  - Implied Volatility curves (by strike) and surfaces (strike vs time)\n  - Risk Reversal curves (by strike)\n  - Dollar Gamma curves (by strike)\n- **Composite Metrics**:\n  - Vanna-Volga Hedge surfaces (price vs volatility)\n  - Delta-Gamma Profile curves (by strike) and surfaces (price vs time)\n  - Smile Dynamics curves (by strike) and surfaces (strike vs time)\n- **Liquidity Metrics**:\n  - Bid-Ask Spread curves (by strike)\n  - Volume Profile curves (by strike) and surfaces (strike vs time)\n  - Open Interest Distribution curves (by strike)\n- **Stress Metrics**:\n  - Volatility Sensitivity curves (by strike) and surfaces (price vs volatility)\n  - Time Decay Profile curves (by strike) and surfaces (price vs time)\n  - Price Shock Impact curves (by strike) and surfaces (price vs volatility)\n- **Temporal Metrics**:\n  - Theta curves (by strike) and surfaces (price vs time)\n  - Charm (Delta Decay) curves (by strike) and surfaces (price vs time)\n  - Color (Gamma Decay) curves (by strike) and surfaces (price vs time)\n\n#### **Risk Management** (`risk/`)\nRisk analysis and management tools:\n- Position risk metrics\n- Break-even analysis\n- Risk profile generation\n\n#### **P\u0026L** (`pnl/`)\nProfit and loss calculation:\n- Real-time P\u0026L tracking\n- Historical P\u0026L analysis\n- Performance attribution\n\n#### **Curves \u0026 Surfaces** (`curves/`, `surfaces/`)\nMathematical tools for financial modeling:\n- Curve interpolation techniques\n- Surface construction and analysis\n- 3D visualization capabilities\n\n#### **Error Handling** (`error/`)\nRobust error management:\n- Comprehensive error types for each module\n- Type-safe error propagation\n- Detailed error reporting\n\n### Core Components\n\n```mermaid\nclassDiagram\nclass Options {\n+option_type: OptionType\n+side: Side\n+underlying_symbol: String\n+strike_price: Positive\n+expiration_date: ExpirationDate\n+implied_volatility: Positive\n+quantity: Positive\n+underlying_price: Positive\n+risk_free_rate: Decimal\n+option_style: OptionStyle\n+dividend_yield: Positive\n+exotic_params: Option~ExoticParams~\n+calculate_price_black_scholes()\n+calculate_price_binomial()\n+time_to_expiration()\n+is_long()\n+is_short()\n+validate()\n+to_plot()\n+calculate_implied_volatility()\n+delta()\n+gamma()\n+theta()\n+vega()\n+rho()\n+vanna()\n+vomma()\n+veta()\n+charm()\n+color()\n}\n\nclass Position {\n+option: Options\n+position_cost: Positive\n+entry_date: DateTime\u003cUtc\u003e\n+open_fee: Positive\n+close_fee: Positive\n+net_cost()\n+net_premium_received()\n+unrealized_pnl()\n+pnl_at_expiration()\n+validate()\n}\n\nclass Leg {\n\u003c\u003cenumeration\u003e\u003e\nOption(Position)\nSpot(SpotPosition)\nFuture(FuturePosition)\nPerpetual(PerpetualPosition)\n+is_option()\n+is_spot()\n+is_linear()\n+delta()\n+pnl_at_price()\n}\n\nclass SpotPosition {\n+symbol: String\n+quantity: Positive\n+cost_basis: Positive\n+side: Side\n+date: DateTime\u003cUtc\u003e\n+open_fee: Positive\n+close_fee: Positive\n+pnl_at_price()\n+delta()\n+market_value()\n+break_even_price()\n}\n\nclass ExpirationDate {\n+Days(Positive)\n+Date(NaiveDate)\n+get_years()\n+get_date()\n+get_date_string()\n+from_string()\n}\n\nclass Positive {\n+value: Decimal\n+ZERO: Positive\n+ONE: Positive\n+format_fixed_places()\n+round_to_nice_number()\n+is_positive()\n}\n\nclass OptionStyle {\n\u003c\u003cenumeration\u003e\u003e\nCall\nPut\n}\n\nclass OptionType {\n\u003c\u003cenumeration\u003e\u003e\nEuropean\nAmerican\nBermuda\nAsian\nBarrier\nBinary\nLookback\nCompound\nChooser\nCliquet\nRainbow\nSpread\nQuanto\nExchange\nPower\n}\n\nclass Side {\n\u003c\u003cenumeration\u003e\u003e\nLong\nShort\n}\n\nclass Graph {\n\u003c\u003cinterface\u003e\u003e\n+graph_data()\n+graph_config()\n+to_plot()\n+write_html()\n+write_png()\n+write_svg()\n+write_jpeg()\n}\n\nclass Greeks {\n\u003c\u003cinterface\u003e\u003e\n+delta()\n+gamma()\n+theta()\n+vega()\n+rho()\n+calculate_all_greeks()\n}\n\nOptions --|\u003e Greeks : implements\nOptions --|\u003e Graph : implements\nPosition o-- Options : contains\nLeg o-- Position : Option variant\nLeg o-- SpotPosition : Spot variant\nSpotPosition *-- Side : has\nSpotPosition *-- Positive : uses\nOptions *-- OptionStyle : has\nOptions *-- OptionType : has\nOptions *-- Side : has\nOptions *-- ExpirationDate : has\nOptions *-- Positive : uses\n```\n\n### Pricing Models Architecture\n\n```mermaid\nflowchart TB\n    subgraph Standard[\"Standard Options\"]\n        EU[European]\n        AM[American]\n        BE[Bermuda]\n    end\n\n    subgraph PathDependent[\"Path-Dependent\"]\n        AS[Asian]\n        LB[Lookback]\n        BA[Barrier]\n        CL[Cliquet]\n    end\n\n    subgraph MultiAsset[\"Multi-Asset\"]\n        RB[Rainbow]\n        SP[Spread]\n        EX[Exchange]\n    end\n\n    subgraph Special[\"Special Payoffs\"]\n        BI[Binary]\n        PW[Power]\n        QU[Quanto]\n        CO[Compound]\n        CH[Chooser]\n    end\n\n    BS[black_scholes] --\u003e EU\n    BS --\u003e PathDependent\n    BS --\u003e MultiAsset\n    BS --\u003e Special\n    BAW[barone_adesi_whaley] --\u003e AM\n    BIN[binomial_model] --\u003e AM\n    BIN --\u003e BE\n    MC[monte_carlo] --\u003e PathDependent\n```\n\n### Strategy Traits System\n\n```mermaid\nclassDiagram\n    class Strategable {\n        \u003c\u003ctrait\u003e\u003e\n        Master trait combining all capabilities\n    }\n\n    class BasicAble {\n        \u003c\u003ctrait\u003e\u003e\n        +get_underlying_price()\n        +get_underlying_symbol()\n        +get_expiration()\n        +get_title()\n    }\n\n    class Positionable {\n        \u003c\u003ctrait\u003e\u003e\n        +get_positions()\n        +add_position()\n        +modify_position()\n    }\n\n    class Strategies {\n        \u003c\u003ctrait\u003e\u003e\n        +get_net_premium_received()\n        +get_max_profit()\n        +get_max_loss()\n        +get_total_cost()\n    }\n\n    class BreakEvenable {\n        \u003c\u003ctrait\u003e\u003e\n        +get_break_even_points()\n        +calculate_break_even()\n    }\n\n    class Profit {\n        \u003c\u003ctrait\u003e\u003e\n        +get_point_at_price()\n        +calculate_profit_at()\n    }\n\n    class Greeks {\n        \u003c\u003ctrait\u003e\u003e\n        +delta()\n        +gamma()\n        +theta()\n        +vega()\n    }\n\n    class DeltaNeutrality {\n        \u003c\u003ctrait\u003e\u003e\n        +get_delta()\n        +suggest_delta_adjustments()\n    }\n\n    class Graph {\n        \u003c\u003ctrait\u003e\u003e\n        +to_plot()\n        +write_html()\n        +write_png()\n    }\n\n    Strategable --|\u003e BasicAble\n    Strategable --|\u003e Positionable\n    Strategable --|\u003e Strategies\n    Strategable --|\u003e BreakEvenable\n    Strategable --|\u003e Profit\n    Strategable --|\u003e Greeks\n    Strategable --|\u003e DeltaNeutrality\n    Strategable --|\u003e Graph\n```\n\n### Metrics Framework\n\n```mermaid\nflowchart LR\n    subgraph OptionChain\n        OC[OptionChain]\n    end\n\n    subgraph Curves[\"Curve Metrics\"]\n        IV_C[IV Curve]\n        RR_C[Risk Reversal]\n        DG_C[Dollar Gamma]\n        TH_C[Theta Curve]\n        VA_C[Vanna Curve]\n        SK_C[Skew Curve]\n    end\n\n    subgraph Surfaces[\"Surface Metrics\"]\n        IV_S[IV Surface]\n        TH_S[Theta Surface]\n        CH_S[Charm Surface]\n        VS_S[Vol Sensitivity]\n        TD_S[Time Decay]\n    end\n\n    OC --\u003e Curves\n    OC --\u003e Surfaces\n    Curves --\u003e |\"2D Analysis\"| Analysis[Risk Analysis]\n    Surfaces --\u003e |\"3D Analysis\"| Analysis\n```\n\n### Observability\n\nPublic hot paths are annotated with `#[tracing::instrument]`.\nEnable a subscriber in the consumer crate (the library itself never\ninstalls one) to surface structured spans:\n\n```mermaid\nflowchart LR\n    APP[Consumer application] -- \"installs\" --\u003e SUB[\"tracing_subscriber\"]\n\n    subgraph Spans[\"Instrumented public fns\"]\n        BS[\"pricing::black_scholes\\n(strike, style, side)\"]\n        MC[\"pricing::monte_carlo_option_pricing\\n(steps, simulations, strike, style, side)\"]\n        BI[\"pricing::price_binomial\\n(strike, asset, steps, style, side)\"]\n        IV[\"volatility::implied_volatility\\n(market_price, strike, max_iterations)\"]\n        OPT[\"Optimizable::get_best_ratio/area\\n(side, criteria)\"]\n    end\n\n    BS --\u003e SUB\n    MC --\u003e SUB\n    BI --\u003e SUB\n    IV --\u003e SUB\n    OPT --\u003e SUB\n```\n\n### Trading Strategies\n\nOptionStratLib provides 25+ comprehensive trading strategies organized by complexity and market outlook:\n\n#### **Single Leg Strategies**\nBasic directional strategies for beginners:\n- **Long Call**: Bullish strategy with unlimited upside potential\n- **Short Call**: Bearish strategy collecting premium with limited profit\n- **Long Put**: Bearish strategy with high profit potential\n- **Short Put**: Bullish strategy collecting premium with assignment risk\n\n#### **Spread Strategies**\nDefined risk strategies with limited profit/loss:\n- **Bull Call Spread**: Moderately bullish with limited risk and reward\n- **Bear Call Spread**: Moderately bearish credit spread\n- **Bull Put Spread**: Moderately bullish credit spread\n- **Bear Put Spread**: Moderately bearish debit spread\n\n#### **Butterfly Strategies**\nMarket neutral strategies profiting from low volatility:\n- **Long Butterfly Spread**: Profits from price staying near middle strike\n- **Short Butterfly Spread**: Profits from price moving away from middle strike\n- **Call Butterfly**: Butterfly using only call options\n\n#### **Complex Multi-Leg Strategies**\nAdvanced strategies for experienced traders:\n- **Iron Condor**: Market neutral strategy with wide profit zone\n- **Iron Butterfly**: Market neutral strategy with narrow profit zone\n\n#### **Volatility Strategies**\nStrategies that profit from volatility changes:\n- **Long Straddle**: Profits from high volatility in either direction\n- **Short Straddle**: Profits from low volatility (range-bound market)\n- **Long Strangle**: Similar to straddle but with different strikes\n- **Short Strangle**: Credit strategy profiting from low volatility\n\n#### **Income Generation Strategies**\nStrategies focused on generating regular income:\n- **Covered Call**: Stock/spot ownership with call selling for income (now with full spot leg support)\n- **Poor Man's Covered Call**: LEAPS-based covered call alternative\n\n#### **Protection Strategies**\nRisk management and hedging strategies:\n- **Protective Put**: Downside protection for stock positions\n- **Collar**: Combination of covered call and protective put\n\n#### **Custom Strategy Framework**\n- **Custom Strategy**: Flexible framework for creating any multi-leg strategy\n- Supports unlimited number of legs\n- Full integration with all analysis tools\n- Complete trait implementation for consistency\n\n#### **Strategy Analysis Features**\nAll strategies include comprehensive analysis capabilities:\n- **Profit/Loss Analysis**: P\u0026L at any price point and time\n- **Break-Even Points**: Multiple break-even calculations\n- **Greeks Analysis**: Real-time risk metrics\n- **Probability Analysis**: Success probability calculations\n- **Delta Neutrality**: Delta-neutral position analysis\n- **Visualization**: Interactive payoff diagrams and risk profiles\n- **Optimization**: Find optimal strikes and expirations\n\n#### **Strategy Traits System**\nAll strategies implement a comprehensive trait system:\n\n- **Strategable**: Master trait combining all strategy capabilities\n- **BasicAble**: Basic strategy information (symbol, price, etc.)\n- **Positionable**: Position management and modification\n- **Strategies**: Core strategy calculations (P\u0026L, break-even, etc.)\n- **Validable**: Strategy validation and error checking\n- **BreakEvenable**: Break-even point calculations\n- **Profit**: Profit/loss analysis at various price points\n- **Greeks**: Greeks calculations for risk management\n- **DeltaNeutrality**: Delta-neutral analysis and adjustments\n- **ProbabilityAnalysis**: Outcome probability calculations\n- **Graph**: Visualization and plotting capabilities\n\n### Setup Instructions\n\n#### Prerequisites\n\n- Rust 1.85 or higher (Rust 2024 edition)\n- Cargo package manager\n\n#### Installation\n\nAdd OptionStratLib to your `Cargo.toml`:\n\n```toml\n[dependencies]\noptionstratlib = \"0.16.5\"\n```\n\nOr use cargo to add it to your project:\n\n```bash\ncargo add optionstratlib\n```\n\n#### Optional Features\n\nThe library includes optional features for enhanced functionality:\n\n```toml\n[dependencies]\noptionstratlib = { version = \"0.16.5\", features = [\"plotly\"] }\n```\n\n- `plotly`: Enables interactive visualization using plotly.rs\n- `static_export`: PNG / SVG export via `plotly_static` (pulls in async runtime)\n- `async`: Enables asynchronous I/O operations for OptionChain and OHLCV data (tokio + reqwest + futures)\n\n#### Building from Source\n\nClone the repository and build using Cargo:\n\n```bash\ngit clone https://github.com/joaquinbejar/OptionStratLib.git\ncd OptionStratLib\ncargo build --release\n```\n\nRun comprehensive test suite:\n\n```bash\ncargo test --all-features\n```\n\nGenerate documentation:\n\n```bash\ncargo doc --open --all-features\n```\n\nRun benchmarks:\n\n```bash\ncargo bench\n```\n\n### Library Usage\n\n#### Basic Option Creation and Pricing\n\n```rust\nuse optionstratlib::{Options, OptionStyle, OptionType, Side, ExpirationDate};\nuse positive::{pos_or_panic,Positive};\nuse rust_decimal_macros::dec;\nuse optionstratlib::greeks::Greeks;\n\nfn main() -\u003e Result\u003c(), optionstratlib::error::Error\u003e {\n    // Create a European call option\n    let option = Options::new(\n        OptionType::European,\n        Side::Long,\n        \"AAPL\".to_string(),\n        pos_or_panic!(150.0),            // strike_price\n        ExpirationDate::Days(pos_or_panic!(30.0)),\n        pos_or_panic!(0.25),             // implied_volatility\n        Positive::ONE,              // quantity\n        pos_or_panic!(155.0),            // underlying_price\n        dec!(0.05),             // risk_free_rate\n        OptionStyle::Call,\n        pos_or_panic!(0.02),             // dividend_yield\n        None,                   // exotic_params\n    );\n\n    // Calculate option price using Black-Scholes\n    let price = option.calculate_price_black_scholes()?;\n    tracing::info!(\"Option price: ${:.2}\", price);\n\n    // Calculate Greeks for risk management\n    let delta = option.delta()?;\n    let gamma = option.gamma()?;\n    let theta = option.theta()?;\n    let vega = option.vega()?;\n    let vanna = option.vanna()?;\n    let vomma = option.vomma()?;\n    let veta = option.veta()?;\n    let charm = option.charm()?;\n    let color = option.color()?;\n    tracing::info!(\"Greeks - Delta: {:.4}, Gamma: {:.4}, Theta: {:.4},\n        Vega: {:.4}, Vanna: {:.4}, Vomma: {:.4}, Veta: {:.4}\n        Charm: {:.4}, Color: {:.4}\",\n        delta, gamma, theta, vega, vanna, vomma, veta, charm, color);\n    Ok(())\n}\n```\n\n#### Working with Trading Strategies\n\n```rust\nuse positive::{Positive, pos_or_panic};\nuse optionstratlib::ExpirationDate;\nuse optionstratlib::strategies::Strategies;\nuse optionstratlib::strategies::bull_call_spread::BullCallSpread;\nuse optionstratlib::strategies::base::{BreakEvenable, BasicAble};\nuse optionstratlib::visualization::Graph;\nuse rust_decimal_macros::dec;\nuse std::error::Error;\n\nfn main() -\u003e Result\u003c(), optionstratlib::error::Error\u003e {\n    use optionstratlib::pricing::Profit;\nlet underlying_price = Positive::HUNDRED;\n\n    // Create a Bull Call Spread strategy\n    let strategy = BullCallSpread::new(\n        \"AAPL\".to_string(),\n        underlying_price,\n        pos_or_panic!(95.0),   // long_strike\n        pos_or_panic!(105.0),  // short_strike\n        ExpirationDate::Days(pos_or_panic!(30.0)),\n        pos_or_panic!(0.25),   // implied_volatility\n        dec!(0.05),   // risk_free_rate\n        pos_or_panic!(2.50),   // long_call_premium\n        pos_or_panic!(2.50),   // long_call_open_fee\n        pos_or_panic!(1.20),   // short_call_premium\n        pos_or_panic!(1.20),   // short_call_close_fee\n        Default::default(), Default::default(),\n        Default::default(), Default::default()\n    )?;\n\n    // Analyze the strategy\n    tracing::info!(\"Strategy: {}\", strategy.get_title());\n    tracing::info!(\"Break-even points: {:?}\", strategy.get_break_even_points()?);\n    tracing::info!(\"Max profit: ${:.2}\", strategy.get_max_profit().unwrap_or(Positive::ZERO));\n    tracing::info!(\"Max loss: ${:.2}\", strategy.get_max_loss().unwrap_or(Positive::ZERO));\n    tracing::info!(\"Net premium: ${:.2}\", strategy.get_net_premium_received()?);\n\n    // Calculate P\u0026L at different price points\n    let prices = vec![pos_or_panic!(90.0), pos_or_panic!(95.0), Positive::HUNDRED, pos_or_panic!(105.0), pos_or_panic!(110.0)];\n    for price in prices {\n        let pnl = strategy.get_point_at_price(\u0026price)?;\n        tracing::info!(\"P\u0026L at ${}: ${:.2}\", price, pnl.0);\n    }\n\n    // Generate visualization\n    #[cfg(feature = \"plotly\")]\n    {\n        strategy.write_html(\"Draws/Visualization/bull_call_spread.html\".as_ref())?;\n    }\n\n    Ok(())\n}\n```\n\n#### Advanced Features: Volatility Analysis\n\n```rust\nuse optionstratlib::prelude::*;\n\nfn main() -\u003e Result\u003c(), optionstratlib::error::Error\u003e {\n    // Create an option for implied volatility calculation\n    let mut option = Options::new(\n        OptionType::European,\n        Side::Long,\n        \"AAPL\".to_string(),\n        pos_or_panic!(105.0), // strike\n        ExpirationDate::Days(pos_or_panic!(90.0)),\n        pos_or_panic!(0.20), // initial IV guess\n        Positive::ONE, // quantity\n        Positive::HUNDRED, // underlying price\n        dec!(0.05), // risk free rate\n        OptionStyle::Call,\n        pos_or_panic!(0.02), // dividend yield\n        None,\n    );\n\n    let market_price = pos_or_panic!(5.50);\n    let iv = implied_volatility(market_price, \u0026mut option, 100)?;\n\n    tracing::info!(\"Implied volatility: {:.2}%\", iv.to_f64() * 100.0);\n    Ok(())\n}\n```\n\n#### Custom Strategy Creation\n\n```rust\nuse optionstratlib::prelude::*;\n\nfn main() -\u003e Result\u003c(), optionstratlib::error::Error\u003e {\n    // Define common parameters\n    let underlying_symbol = \"DAX\".to_string();\n    let underlying_price = pos_or_panic!(24000.0);\n    let expiration = ExpirationDate::Days(pos_or_panic!(30.0));\n    let implied_volatility = pos_or_panic!(0.25);\n    let risk_free_rate = dec!(0.05);\n    let dividend_yield = pos_or_panic!(0.02);\n    let fee = Positive::TWO;\n\n    // Create a long put option\n    let long_put_option = Options::new(\n        OptionType::European,\n        Side::Long,\n        underlying_symbol.clone(),\n        pos_or_panic!(24070.0), // strike\n        expiration.clone(),\n        implied_volatility,\n        Positive::ONE, // quantity\n        underlying_price,\n        risk_free_rate,\n        OptionStyle::Put,\n        dividend_yield,\n        None,\n    );\n    let long_put = Position::new(\n        long_put_option,\n        pos_or_panic!(150.0), // premium\n        Utc::now(),\n        fee,\n        fee,\n        None,\n        None,\n    );\n\n    // Create a long call option\n    let long_call_option = Options::new(\n        OptionType::European,\n        Side::Long,\n        underlying_symbol.clone(),\n        pos_or_panic!(24030.0), // strike\n        expiration.clone(),\n        implied_volatility,\n        Positive::ONE, // quantity\n        underlying_price,\n        risk_free_rate,\n        OptionStyle::Call,\n        dividend_yield,\n        None,\n    );\n    let long_call = Position::new(\n        long_call_option,\n        pos_or_panic!(120.0), // premium\n        Utc::now(),\n        fee,\n        fee,\n        None,\n        None,\n    );\n\n    // Create CustomStrategy with the positions\n    let positions = vec![long_call, long_put];\n    let strategy = CustomStrategy::new(\n        \"DAX Straddle Strategy\".to_string(),\n        underlying_symbol,\n        \"A DAX long straddle strategy\".to_string(),\n        underlying_price,\n        positions,\n        Positive::ONE,\n        30,\n        implied_volatility,\n    )?;\n\n    tracing::info!(\"Strategy created: {}\", strategy.get_title());\n    Ok(())\n}\n```\n\n### Testing\n\nOptionStratLib ships with a large, fully deterministic test suite\n(3760 unit / integration tests + 205 doctests + property- and\nidentity-based regressions):\n\n#### **Running Tests**\n\nRun all tests:\n```bash\ncargo test --all-features\n```\n\nRun tests for specific modules:\n```bash\ncargo test strategies::bull_call_spread\ncargo test pricing::black_scholes\ncargo test volatility::utils\n```\n\nRun tests with output:\n```bash\ncargo test -- --nocapture\n```\n\n#### **Test Categories**\n\n- **Unit Tests**: Individual function and method testing\n- **Integration Tests**: Cross-module functionality under `tests/`\n- **Strategy Tests**: Comprehensive strategy validation\n- **Pricing Model Tests**: Accuracy and performance testing\n- **Greeks Tests**: Mathematical precision validation\n- **Visualization Tests**: Chart generation and export testing\n- **Property-Based Tests**: Mathematical invariant testing with `proptest`\n  (`tests/property/put_call_parity_test.rs`, `greeks_bounds_test.rs`)\n- **Identity Regression Tests**: `tests/unit/pricing/identities_test.rs`\n  locks put-call parity, CRR → Black-Scholes convergence, and\n  Greek sanity (`Γ_c = Γ_p`, `Vega_c = Vega_p`,\n  `Δ_c − Δ_p ≈ e^{-qT}`).\n- **Deterministic Monte-Carlo Tests**: Seeded via\n  [`utils::deterministic_rng`] so arithmetic-precision shifts can't\n  flip assertions.\n- **Exotic Options Tests**: Complete coverage for all 14 exotic\n  option types.\n\n#### **Benchmarking**\n\nRun performance benchmarks:\n```bash\ncargo bench\n```\n\nGenerate test coverage report:\n```bash\ncargo tarpaulin --all-features --out Html\n```\n\n### Examples\n\nExamples live in self-contained sub-crates under `examples/`, each\nwith its own `Cargo.toml`:\n\n- **`examples_strategies/`**: 25+ strategy demos\n- **`examples_strategies_best/`**: Optimizer entry points\n  (`get_best_area` / `get_best_ratio`) per strategy\n- **`examples_strategies_delta/`**: Delta-neutrality workflows\n- **`examples_chain/`**: Option chain construction, import/export,\n  and async I/O\n- **`examples_curves/`**: Greek curves (`charm`, `color`, `d1`, `d2`,\n  `delta`, `gamma`, `rho`, `theta`, …) and vector curves\n- **`examples_surfaces/`**: 3-D volatility surfaces\n- **`examples_metrics/`**: Price / risk / liquidity / stress /\n  temporal / composite metric curves and surfaces\n- **`examples_volatility/`**: Implied-volatility solver walkthroughs\n- **`examples_simulation/`**: Monte-Carlo random-walk demos for\n  `LongCall`, `ShortPut`, position / strategy simulators, and\n  random-walk-of-chain\n- **`examples_exotics/`**: Exotic option pricing (barrier,\n  cliquet, …)\n- **`examples_visualization/`**: Interactive chart wiring\n\nRun any binary with the usual cargo invocation (from the repo\nroot, so relative data-fixture paths resolve correctly):\n\n```bash\ncargo run --manifest-path=examples/examples_strategies/Cargo.toml \\\n    --bin strategy_bull_call_spread\ncargo run --manifest-path=examples/examples_simulation/Cargo.toml \\\n    --bin long_call_strategy_simulation --features plotly\ncargo run --manifest-path=examples/examples_metrics/Cargo.toml \\\n    --bin implied_volatility_surface\n```\n\nSimulation-heavy demos (`*_strategy_simulation`, `position_simulator`,\n`strategy_simulator`, `random_walk_chain`) use a demo-friendly\nhourly grid so `cargo run` finishes in a few seconds in debug mode;\nbump `n_steps` / `n_simulations` inside the binary if you want a\nfiner sample.\n\n### Contribution and Contact\n\n#### **Contributing**\n\nContributions are welcome! Please follow these guidelines:\n\n1. **Fork** the repository\n2. **Create** a feature branch: `git checkout -b feature/amazing-feature`\n3. **Commit** your changes: `git commit -m 'Add amazing feature'`\n4. **Push** to the branch: `git push origin feature/amazing-feature`\n5. **Open** a Pull Request\n\n#### **Development Setup**\n\n```bash\ngit clone https://github.com/joaquinbejar/OptionStratLib.git\ncd OptionStratLib\ncargo build --all-features\ncargo test --all-features\n```\n\n#### **Code Quality**\n\n- All code must pass `cargo clippy` without warnings\n- Format code with `cargo fmt`\n- Add tests for new functionality\n- Update documentation for API changes\n- Follow Rust 2024 edition best practices\n\n\n#### **Support**\n\n- **Issues**: Report bugs and request features on GitHub\n- **Discussions**: Join community discussions on GitHub Discussions\n- **Documentation**: Comprehensive docs available at docs.rs\n\n---\n\n**OptionStratLib v0.16.5** - Built with ❤️ in Rust for the financial community\n\n\n\n\n## Contribution and Contact\n\nWe welcome contributions to this project! If you would like to contribute, please follow these steps:\n\n1. Fork the repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and ensure that the project still builds and all tests pass.\n4. Commit your changes and push your branch to your forked repository.\n5. Submit a pull request to the main repository.\n\nIf you have any questions, issues, or would like to provide feedback, please feel free to contact the project maintainer:\n\n\n### **Contact Information**\n\n- **Author**: Joaquín Béjar García\n- **Email**: jb@taunais.com\n- **Telegram**: [@joaquin_bejar](https://t.me/joaquin_bejar)\n- **Repository**: \u003chttps://github.com/joaquinbejar/OptionStratLib\u003e\n- **Documentation**: \u003chttps://docs.rs/optionstratlib\u003e\n\nWe appreciate your interest and look forward to your contributions!\n\n## ✍️ License\n\nLicensed under **MIT** license\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoaquinbejar%2Foptionstratlib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoaquinbejar%2Foptionstratlib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoaquinbejar%2Foptionstratlib/lists"}