Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,7 @@ let underlying_price = Positive::HUNDRED;
pos_or_panic!(1.20), // short_call_close_fee
Default::default(), Default::default(),
Default::default(), Default::default()
);
)?;

// Analyze the strategy
tracing::info!("Strategy: {}", strategy.get_title());
Expand Down Expand Up @@ -934,7 +934,7 @@ let strategy = CustomStrategy::new(
Positive::ONE,
30,
implied_volatility,
);
).expect("valid custom strategy");

tracing::info!("Strategy created: {}", strategy.get_title());
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,9 @@ fn main() -> Result<(), Error> {
walker,
};

let random_walk = RandomWalk::new(
"Random Walk".to_string(),
&walk_params,
generator_optionchain,
);
let random_walk = RandomWalk::new("Random Walk".to_string(), &walk_params, |p| {
generator_optionchain(p).expect("generator_optionchain failed")
});
debug!("Random Walk: {}", random_walk);
let path: &Path = "Draws/Simulation/historical_build_chain.png".as_ref();
random_walk.write_png(path)?;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ fn main() -> Result<(), Error> {
"Long Call Simulator".to_string(),
n_simulations,
&walk_params,
generator_positive,
|p| generator_positive(p).expect("generator_positive failed"),
);

info!("Running simulations using Simulate trait...");
Expand Down
9 changes: 3 additions & 6 deletions examples/examples_simulation/src/bin/position_simulator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,9 @@ fn main() -> Result<(), Error> {
walker,
};

let simulator = Simulator::new(
"Simulator".to_string(),
simulator_size,
&walk_params,
generator_positive,
);
let simulator = Simulator::new("Simulator".to_string(), simulator_size, &walk_params, |p| {
generator_positive(p).expect("generator_positive failed")
});
debug!("Simulator: {}", simulator);

let option: Options = Options::new(
Expand Down
4 changes: 3 additions & 1 deletion examples/examples_simulation/src/bin/random_walk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ fn main() -> Result<(), Error> {
walker,
};

let random_walk = RandomWalk::new("Random Walk".to_string(), &walk_params, generator_positive);
let random_walk = RandomWalk::new("Random Walk".to_string(), &walk_params, |p| {
generator_positive(p).expect("generator_positive failed")
});
debug!("Random Walk: {}", random_walk);
let path: &std::path::Path = "Draws/Simulation/random_walk.png".as_ref();
random_walk.write_png(path)?;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,9 @@ fn main() -> Result<(), Error> {
walker,
};

let random_walk = RandomWalk::new(
"Random Walk".to_string(),
&walk_params,
generator_optionchain,
);
let random_walk = RandomWalk::new("Random Walk".to_string(), &walk_params, |p| {
generator_optionchain(p).expect("generator_optionchain failed")
});
debug!("Random Walk: {}", random_walk);
let path: &std::path::Path = "Draws/Simulation/random_walk_build_chain.png".as_ref();
random_walk.write_png(path)?;
Expand Down
8 changes: 3 additions & 5 deletions examples/examples_simulation/src/bin/random_walk_chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,9 @@ fn main() -> Result<(), Error> {
walker,
};

let random_walk = RandomWalk::new(
"Random Walk".to_string(),
&walk_params,
generator_optionchain,
);
let random_walk = RandomWalk::new("Random Walk".to_string(), &walk_params, |p| {
generator_optionchain(p).expect("generator_optionchain failed")
});

debug!("Random Walk: {}", random_walk);
let path: &std::path::Path = "Draws/Simulation/random_walk_chain.png".as_ref();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ fn main() -> Result<(), Error> {
"Short Put Simulator".to_string(),
n_simulations,
&walk_params,
generator_positive,
|p| generator_positive(p).expect("generator_positive failed"),
);

// Create progress bar
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ fn main() -> Result<(), Error> {
"Short Put Simulator".to_string(),
n_simulations,
&walk_params,
generator_positive,
|p| generator_positive(p).expect("generator_positive failed"),
);

info!("Running simulations using Simulate trait...");
Expand Down
9 changes: 3 additions & 6 deletions examples/examples_simulation/src/bin/simulator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,9 @@ fn main() -> Result<(), Error> {
walker,
};

let simulator = Simulator::new(
"Simulator".to_string(),
simulator_size,
&walk_params,
generator_positive,
);
let simulator = Simulator::new("Simulator".to_string(), simulator_size, &walk_params, |p| {
generator_positive(p).expect("generator_positive failed")
});
debug!("Simulator: {}", simulator);

// let last_steps: Vec<&Step<Positive, Positive>> = simulator
Expand Down
9 changes: 3 additions & 6 deletions examples/examples_simulation/src/bin/strategy_simulator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,9 @@ fn main() -> Result<(), Error> {
walker,
};

let simulator = Simulator::new(
"Simulator".to_string(),
simulator_size,
&walk_params,
generator_positive,
);
let simulator = Simulator::new("Simulator".to_string(), simulator_size, &walk_params, |p| {
generator_positive(p).expect("generator_positive failed")
});
debug!("Simulator: {}", simulator);

info!("Open Premium: ${:.2}", open_premium);
Expand Down
20 changes: 7 additions & 13 deletions src/chains/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ impl OptionChain {
/// # Examples
///
/// ```
/// # fn run() -> Result<(), Box<dyn std::error::Error>> {
/// use rust_decimal_macros::dec;
/// use optionstratlib::chains::utils::{OptionChainBuildParams, OptionDataPriceParams};
/// use positive::{pos_or_panic, spos, Positive};
Expand All @@ -352,7 +353,9 @@ impl OptionChain {
/// pos_or_panic!(0.2) // implied volatility
/// );
///
/// let chain = OptionChain::build_chain(&build_params).unwrap();
/// let chain = OptionChain::build_chain(&build_params)?;
/// # Ok(())
/// # }
/// ```
/// Builds a complete option chain based on the provided parameters.
///
Expand Down Expand Up @@ -563,18 +566,9 @@ impl OptionChain {
let strike_prices: Vec<Positive> =
self.options.iter().map(|opt| opt.strike_price).collect();

if !strike_prices.is_empty() {
// Find the maximum distance from ATM in number of strikes
// SAFETY: We just checked that strike_prices is not empty
let min_strike = strike_prices
.iter()
.min()
.expect("strike_prices is not empty");
let max_strike = strike_prices
.iter()
.max()
.expect("strike_prices is not empty");

if let Some((min_strike, max_strike)) =
strike_prices.iter().min().zip(strike_prices.iter().max())
{
let strikes_below = ((atm_strike.to_dec() - min_strike.to_dec())
/ strike_interval.to_dec())
.ceil()
Expand Down
Loading
Loading