Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
a3fc3f7
Bump version to 0.2.5
joaquinbejar Dec 13, 2024
a6a5acf
Update image URLs and add badges to README and docs
joaquinbejar Dec 13, 2024
be430bf
Add risk-free rate and dividend yield to OptionChain
joaquinbejar Dec 14, 2024
ec1b847
Add placeholder method for filtering option combinations
joaquinbejar Dec 14, 2024
af002b2
Add support for strike price in `get_params` method
joaquinbejar Dec 14, 2024
4fe8d7e
Add `from_string` method for `ExpirationDate` parsing
joaquinbejar Dec 14, 2024
06fa697
Update OptionChain initialization and enhance BullPutSpread
joaquinbejar Dec 14, 2024
7116e2e
Update profit/loss charts for strategy visualizations
joaquinbejar Dec 16, 2024
c3c791d
Update profit/loss charts for strangle strategies
joaquinbejar Dec 16, 2024
10f748b
Update profit-loss charts for straddle and strangle strategies
joaquinbejar Dec 16, 2024
b199467
Update iron butterfly strategy profit/loss chart visuals
joaquinbejar Dec 16, 2024
5b33971
Update iron condor profit/loss chart visuals
joaquinbejar Dec 16, 2024
10c0a35
Add 'zip' target to Makefile for creating project archives
joaquinbejar Dec 16, 2024
713b83b
Add `get_single_iter` method to traverse `OptionChain` options
joaquinbejar Dec 16, 2024
2662ae1
Add new variant to OptionDataGroup enum
joaquinbejar Dec 16, 2024
e6ed179
Disable mesh grid in chart configuration
joaquinbejar Dec 16, 2024
406625e
Refactor strategy optimization logic for clarity and efficiency
joaquinbejar Dec 16, 2024
23557bb
Refactor spread strategies for improved filtering logic
joaquinbejar Dec 16, 2024
78a772b
Refactor butterfly spread strategies for optimized filtering
joaquinbejar Dec 16, 2024
6dfd3a6
Refactor option filtering and validation for straddles
joaquinbejar Dec 16, 2024
f5a8ad2
Refactor CallButterfly strategy structure and logic.
joaquinbejar Dec 16, 2024
789ac0c
Refactor strangle strategy optimization logic
joaquinbejar Dec 16, 2024
4b57f84
Remove redundant and failing test cases in strategy modules
joaquinbejar Dec 16, 2024
5496f50
Update profit/loss and intrinsic value charts
joaquinbejar Dec 16, 2024
45ed252
Add logging for Greeks calculations to all strategies
joaquinbejar Dec 16, 2024
f4939ea
Refactor examples to adjust parameters and add option fields
joaquinbejar Dec 16, 2024
f62c264
Adjust short_quantity and add missing close_fee in call butterfly.
joaquinbejar Dec 16, 2024
ddd7bc8
Merge pull request #68 from joaquinbejar/feature/#62-Implement-filter…
joaquinbejar Dec 16, 2024
688b994
Add comprehensive tests for BearCallSpread functionality
joaquinbejar Dec 17, 2024
60c7bf2
Add unit tests for Bear Put Spread filtering logic
joaquinbejar Dec 17, 2024
6fa606e
Merge pull request #69 from joaquinbejar/feature/#67-Create-Unit-Test…
joaquinbejar Dec 18, 2024
d112dbe
Refactor code for clarity and test modularization.
joaquinbejar Dec 18, 2024
ab91c03
Replace `println!` with `tracing::info` and optimize unit tests
joaquinbejar Dec 19, 2024
9645204
Set LOGLEVEL to WARN for test command in Makefile
joaquinbejar Dec 19, 2024
a88d31e
Add unit tests for optimal trading strategies
joaquinbejar Dec 19, 2024
13e91f1
Parallelize `process_n_times_iter` and improve thread safety.
joaquinbejar Dec 19, 2024
56f521d
Add integration tests for various options trading strategies
joaquinbejar Dec 19, 2024
e7bff12
Refactor call butterfly optimization logic
joaquinbejar Dec 19, 2024
2b3c2d0
Merge pull request #70 from joaquinbejar/feature/#66-Convert-Strategy…
joaquinbejar Dec 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "optionstratlib"
version = "0.2.4"
version = "0.2.5"
edition = "2021"
authors = ["Joaquin Bejar <[email protected]>"]
description = "OptionStratLib is a comprehensive Rust library for options trading and strategy development across multiple asset classes."
Expand Down
Binary file modified Draws/Options/intrinsic_value_chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/bear_call_spread_profit_loss_chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/bear_call_spread_profit_loss_chart_best_area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/bear_call_spread_profit_loss_chart_best_ratio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/bull_call_spread_profit_loss_chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/bull_put_spread_profit_loss_chart_best_ratio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/call_butterfly_profit_loss_chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/call_butterfly_profit_loss_chart_best_area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/iron_butterfly_profit_loss_chart_best_area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/iron_condor_profit_loss_chart_best_area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/iron_condor_profit_loss_chart_best_ratio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/long_butterfly_spread_profit_loss_chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/long_straddle_profit_loss_chart_best_area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/long_straddle_profit_loss_chart_best_ratio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/long_strangle_profit_loss_chart_best_area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/short_straddle_profit_loss_chart_best_area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/short_strangle_delta_profit_loss_chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/short_strangle_profit_loss_chart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Draws/Strategy/short_strangle_profit_loss_chart_best_area.png
17 changes: 15 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Makefile for common tasks in a Rust project
# Detect current branch
CURRENT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
ZIP_NAME = OptionStratLib.zip


# Default target
.PHONY: all
Expand All @@ -18,7 +20,7 @@ release:
# Run tests
.PHONY: test
test:
cargo test
LOGLEVEL=WARN cargo test

# Format the code
.PHONY: fmt
Expand Down Expand Up @@ -102,4 +104,15 @@ readme: create-doc

.PHONY: check-spanish
check-spanish:
cd scripts && python3 spanish.py ../src && cd ..
cd scripts && python3 spanish.py ../src && cd ..

.PHONY: zip
zip:
@echo "Creating $(ZIP_NAME) without any 'target' directories, 'Cargo.lock', and hidden files..."
@find . -type f \
! -path "*/target/*" \
! -path "./.*" \
! -name "Cargo.lock" \
! -name ".*" \
| zip -@ $(ZIP_NAME)
@echo "$(ZIP_NAME) created successfully."
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,23 @@


<div style="text-align: center;">
<img src="doc/images/logo.png" alt="OptionStratLib" style="width: 100%; height: 200px;">
<img src="https://raw.githubusercontent.com/joaquinbejar/OptionStratLib/refs/heads/main/doc/images/logo.png" alt="OptionStratLib" style="width: 100%; height: 200px;">
</div>

[![Dual License](https://img.shields.io/badge/license-MIT%20and%20Apache%202.0-blue)](./LICENSE)
[![Crates.io](https://img.shields.io/crates/v/optionstratlib.svg)](https://crates.io/crates/optionstratlib)
[![Downloads](https://img.shields.io/crates/d/optionstratlib.svg)](https://crates.io/crates/optionstratlib)
[![Stars](https://img.shields.io/github/stars/joaquinbejar/OptionStratLib.svg)](https://github.com/joaquinbejar/OptionStratLib/stargazers)
[![Issues](https://img.shields.io/github/issues/joaquinbejar/OptionStratLib.svg)](https://github.com/joaquinbejar/OptionStratLib/issues)
[![PRs](https://img.shields.io/github/issues-pr/joaquinbejar/OptionStratLib.svg)](https://github.com/joaquinbejar/OptionStratLib/pulls)


[![Build Status](https://img.shields.io/github/workflow/status/joaquinbejar/OptionStratLib/CI)](https://github.com/joaquinbejar/OptionStratLib/actions)
[![Coverage](https://img.shields.io/codecov/c/github/joaquinbejar/OptionStratLib)](https://codecov.io/gh/joaquinbejar/OptionStratLib)
[![Dependencies](https://img.shields.io/librariesio/github/joaquinbejar/OptionStratLib)](https://libraries.io/github/joaquinbejar/OptionStratLib)
[![Documentation](https://img.shields.io/badge/docs-latest-blue.svg)](https://docs.rs/optionstratlib)

# OptionStratLib v0.2.4: Financial Options Library
# OptionStratLib v0.2.5: Financial Options Library

## Table of Contents
1. [Introduction](#introduction)
Expand Down
8 changes: 7 additions & 1 deletion examples/examples_chain/src/bin/option_chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,13 @@ use tracing::info;

fn main() {
setup_logger();
let mut chain = OptionChain::new("SP500", pos!(5781.88), "18 oct 2024".to_string());
let mut chain = OptionChain::new(
"SP500",
pos!(5781.88),
"18 oct 2024".to_string(),
None,
None,
);

chain.add_option(
pos!(5520.0),
Expand Down
16 changes: 8 additions & 8 deletions examples/examples_strategies/src/bin/strategy_call_butterfly.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,26 +21,26 @@ fn main() -> Result<(), Box<dyn Error>> {
let strategy = CallButterfly::new(
"SP500".to_string(),
underlying_price, // underlying_price
pos!(5750.0), // long_strike_itm
pos!(5850.0), // long_strike_otm
pos!(5800.0), // short_strike
pos!(5750.0), // long_call_strike
pos!(5800.0), // short_call_low_strike
pos!(5850.0), // short_call_high_strike
ExpirationDate::Days(2.0),
0.18, // implied_volatility
0.05, // risk_free_rate
0.0, // dividend_yield
pos!(1.0), // long quantity
pos!(2.0), // short_quantity
85.04, // premium_long_itm
31.65, // premium_long_otm
53.04, // premium_short
53.04, // premium_long_otm
28.85, // premium_short
0.78, // premium_short
0.78, // open_fee_long
0.78, // close_fee_long
0.73, // close_fee_short
0.73, // close_fee_short
0.72, // open_fee_short
);

let price_range = strategy.best_range_to_show(pos!(1.0)).unwrap();
let range = strategy.break_even_points[1] - strategy.break_even_points[0];
let range = strategy.range_of_profit().unwrap_or(PZERO);

info!("Title: {}", strategy.title());
info!("Break Even Points: {:?}", strategy.break_even_points);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
Date: 25/9/24
******************************************************************************/

use optionstratlib::greeks::equations::Greeks;
use optionstratlib::model::types::PositiveF64;
use optionstratlib::model::types::{ExpirationDate, PZERO};
use optionstratlib::pos;
Expand All @@ -17,40 +18,24 @@ use tracing::info;
fn main() -> Result<(), Box<dyn Error>> {
setup_logger();

let underlying_price = pos!(5781.88);
let underlying_price = pos!(5795.88);

let strategy = LongButterflySpread::new(
"SP500".to_string(),
underlying_price, // underlying_price
pos!(5810.0), // long_strike_itm
pos!(5820.0), // short_strike
pos!(6200.0), // long_strike_otm
pos!(5710.0), // long_strike_itm
pos!(5780.0), // short_strike
pos!(5850.0), // long_strike_otm
ExpirationDate::Days(2.0),
0.18, // implied_volatility
0.05, // risk_free_rate
0.0, // dividend_yield
pos!(1.0), // long quantity
49.65, // premium_long
42.93, // premium_short
1.0, // open_fee_long
4.0, // open_fee_long
113.30, // premium_long
64.20, // premium_short
31.65, // open_fee_long
0.07, // open_fee_long
);
// let strategy = LongButterfly::new(
// "SP500".to_string(),
// underlying_price, // underlying_price
// pos!(5730.0), // long_strike_itm
// pos!(5740.0), // short_strike
// pos!(5850.0), // long_strike_otm
// ExpirationDate::Days(2.0),
// 0.18, // implied_volatility
// 0.05, // risk_free_rate
// 0.0, // dividend_yield
// pos!(1.0), // long quantity
// 98.79, // premium_long
// 90.02, // premium_short
// 31.65, // open_fee_long
// 4.0, // open_fee_long
// );

let price_range = strategy.best_range_to_show(pos!(1.0)).unwrap();

Expand All @@ -74,5 +59,7 @@ fn main() -> Result<(), Box<dyn Error>> {
(1400, 933),
)?;

info!("Greeks: {:#?}", strategy.greeks());

Ok(())
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use optionstratlib::greeks::equations::Greeks;
use optionstratlib::model::types::PositiveF64;
use optionstratlib::model::types::{ExpirationDate, PZERO};
use optionstratlib::pos;
Expand Down Expand Up @@ -58,5 +59,7 @@ fn main() -> Result<(), Box<dyn Error>> {
(1400, 933),
)?;

info!("Greeks: {:#?}", strategy.greeks());

Ok(())
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,24 @@ use tracing::info;
fn main() -> Result<(), Box<dyn Error>> {
setup_logger();

let underlying_price = pos!(2655.6);
let underlying_price = pos!(7250.6);

let strategy = ShortStrangle::new(
"GOLD".to_string(),
"CL".to_string(),
underlying_price, // underlying_price
pos!(2480.0), // call_strike
pos!(2650.0), // put_strike
ExpirationDate::Days(3.0),
0.1548, // implied_volatility
pos!(7450.0), // call_strike
pos!(7050.0), // put_strike
ExpirationDate::Days(45.0),
0.3745, // implied_volatility
0.05, // risk_free_rate
0.0, // dividend_yield
pos!(2.0), // quantity
46.3, // premium_short_call
4.6, // premium_short_put
0.96, // open_fee_short_call
0.96, // close_fee_short_call
0.96, // open_fee_short_put
0.96, // close_fee_short_put
84.2, // premium_short_call
353.2, // premium_short_put
7.01, // open_fee_short_call
7.01, // close_fee_short_call
7.01, // open_fee_short_put
7.01, // close_fee_short_put
);

let price_range = strategy.best_range_to_show(pos!(1.0)).unwrap();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ fn main() -> Result<(), Box<dyn Error>> {
range,
(range / 2.0) / underlying_price * 100.0
);
info!("Profit Ratio: {:.2}%", strategy.profit_ratio());
info!("Profit Area: {:.2}%", strategy.profit_area());

if strategy.profit_ratio() > ZERO {
debug!("Strategy: {:#?}", strategy);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ fn main() -> Result<(), Box<dyn Error>> {

let option_chain =
OptionChain::load_from_json("./examples/Chains/SP500-18-oct-2024-5781.88.json")?;
// println!("{}", option_chain);
let underlying_price = option_chain.underlying_price;
let mut strategy = BullCallSpread::new(
"SP500".to_string(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ fn main() -> Result<(), Box<dyn Error>> {

let option_chain =
OptionChain::load_from_json("./examples/Chains/SP500-18-oct-2024-5781.88.json")?;
// println!("{}", option_chain);
let underlying_price = option_chain.underlying_price;
let mut strategy = BullCallSpread::new(
"SP500".to_string(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ use optionstratlib::strategies::call_butterfly::CallButterfly;
use optionstratlib::strategies::utils::FindOptimalSide;
use optionstratlib::utils::logger::setup_logger;
use optionstratlib::visualization::utils::Graph;
use std::env;
use std::error::Error;
use tracing::{debug, info};

Expand All @@ -33,14 +32,15 @@ fn main() -> Result<(), Box<dyn Error>> {
0.05, // risk_free_rate
ZERO, // dividend_yield
pos!(2.0), // long quantity
pos!(4.0), // short_quantity
ZERO, // short_quantity
ZERO, // premium_long_itm
ZERO, // premium_long_otm
ZERO, // premium_short
0.78, // open_fee_long
0.78, // close_fee_long
0.73, // close_fee_short
0.73, // close_fee_short
0.73, // close_fee_short
);

strategy.best_area(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,15 @@ fn main() -> Result<(), Box<dyn Error>> {
0.05, // risk_free_rate
ZERO, // dividend_yield
pos!(2.0), // long quantity
pos!(4.0), // short_quantity
ZERO, // short_quantity
ZERO, // premium_long_itm
ZERO, // premium_long_otm
ZERO, // premium_short
0.78, // open_fee_long
0.78, // close_fee_long
0.73, // close_fee_short
0.73, // close_fee_short
0.73,
);

strategy.best_ratio(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use optionstratlib::chains::chain::OptionChain;
use optionstratlib::constants::ZERO;
use optionstratlib::greeks::equations::Greeks;
use optionstratlib::model::types::PositiveF64;
use optionstratlib::model::types::{ExpirationDate, PZERO};
use optionstratlib::pos;
Expand Down Expand Up @@ -69,5 +70,7 @@ fn main() -> Result<(), Box<dyn Error>> {
)?;
}

info!("Greeks: {:#?}", strategy.greeks());

Ok(())
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use optionstratlib::chains::chain::OptionChain;
use optionstratlib::constants::ZERO;
use optionstratlib::greeks::equations::Greeks;
use optionstratlib::model::types::PositiveF64;
use optionstratlib::model::types::{ExpirationDate, PZERO};
use optionstratlib::pos;
Expand Down Expand Up @@ -68,6 +69,7 @@ fn main() -> Result<(), Box<dyn Error>> {
(1400, 933),
)?;
}
info!("Greeks: {:#?}", strategy.greeks());

Ok(())
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use optionstratlib::chains::chain::OptionChain;
use optionstratlib::constants::ZERO;
use optionstratlib::greeks::equations::Greeks;
use optionstratlib::model::types::PositiveF64;
use optionstratlib::model::types::{ExpirationDate, PZERO};
use optionstratlib::pos;
Expand Down Expand Up @@ -69,6 +70,6 @@ fn main() -> Result<(), Box<dyn Error>> {
(1400, 933),
)?;
}

info!("Greeks: {:#?}", strategy.greeks());
Ok(())
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use optionstratlib::chains::chain::OptionChain;
use optionstratlib::constants::ZERO;
use optionstratlib::greeks::equations::Greeks;
use optionstratlib::model::types::PositiveF64;
use optionstratlib::model::types::{ExpirationDate, PZERO};
use optionstratlib::pos;
Expand Down Expand Up @@ -69,6 +70,6 @@ fn main() -> Result<(), Box<dyn Error>> {
(1400, 933),
)?;
}

info!("Greeks: {:#?}", strategy.greeks());
Ok(())
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use optionstratlib::chains::chain::OptionChain;
use optionstratlib::constants::ZERO;
use optionstratlib::greeks::equations::Greeks;
use optionstratlib::model::types::PositiveF64;
use optionstratlib::model::types::{ExpirationDate, PZERO};
use optionstratlib::pos;
Expand Down Expand Up @@ -34,7 +35,6 @@ fn main() -> Result<(), Box<dyn Error>> {
0.82, // close_fee_short_put
);
strategy.best_area(&option_chain, FindOptimalSide::All);
// info!("Option Chain: {}", option_chain);
debug!("Strategy: {:#?}", strategy);
let price_range = strategy.best_range_to_show(pos!(1.0)).unwrap();
let range = strategy.range_of_profit().unwrap_or(PZERO);
Expand Down Expand Up @@ -63,6 +63,6 @@ fn main() -> Result<(), Box<dyn Error>> {
(1400, 933),
)?;
}

info!("Greeks: {:#?}", strategy.greeks());
Ok(())
}
Loading
Loading