diff --git a/Cargo.lock b/Cargo.lock index 5e1017b..2e7af32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -609,6 +609,7 @@ name = "pyfinlib" version = "0.0.2" dependencies = [ "finlib", + "log", "pyo3", "pyo3-log", ] diff --git a/finlib-ffi/src/lib.rs b/finlib-ffi/src/lib.rs index c80dcec..ddf2a73 100644 --- a/finlib-ffi/src/lib.rs +++ b/finlib-ffi/src/lib.rs @@ -42,5 +42,5 @@ pub unsafe extern "C" fn varcovar_value_at_risk(arr: *const f64, len: usize, con slice::from_raw_parts(arr, len) }; - Box::into_raw(Box::new(finlib::risk::var::varcovar::value_at_risk(input_array, confidence))) + Box::into_raw(Box::new(finlib::risk::var::varcovar::value_at_risk_percent(input_array, confidence))) } diff --git a/finlib-wasm/src/lib.rs b/finlib-wasm/src/lib.rs index d6489d8..84e8ddd 100644 --- a/finlib-wasm/src/lib.rs +++ b/finlib-wasm/src/lib.rs @@ -29,7 +29,7 @@ impl ValueAtRisk { } pub fn varcovar(values: Vec<f64>, confidence: f64) -> f64 { - finlib::risk::var::varcovar::value_at_risk(&values, confidence) + finlib::risk::var::varcovar::value_at_risk_percent(&values, confidence) } } diff --git a/finlib/src/ffi/py/portfolio.rs b/finlib/src/ffi/py/portfolio.rs index 3d5ddb6..92eaa11 100644 --- a/finlib/src/ffi/py/portfolio.rs +++ b/finlib/src/ffi/py/portfolio.rs @@ -15,8 +15,13 @@ impl Portfolio { } #[pyo3(name = "value_at_risk")] - pub fn value_at_risk_py(&mut self, confidence: f64) -> PyResult<Option<f64>> { - Ok(self.value_at_risk(confidence)) + pub fn value_at_risk_py(&mut self, confidence: f64, initial_investment: f64) -> PyResult<Option<f64>> { + Ok(self.value_at_risk(confidence, initial_investment)) + } + + #[pyo3(name = "value_at_risk_percent")] + pub fn value_at_risk_pct_py(&mut self, confidence: f64) -> PyResult<Option<f64>> { + Ok(self.value_at_risk_percent(confidence)) } } diff --git a/finlib/src/ffi/wasm/portfolio.rs b/finlib/src/ffi/wasm/portfolio.rs index 91242d9..b07da61 100644 --- a/finlib/src/ffi/wasm/portfolio.rs +++ b/finlib/src/ffi/wasm/portfolio.rs @@ -14,9 +14,14 @@ impl Portfolio { self.is_valid() } + #[wasm_bindgen(js_name = "valueAtRiskPercent")] + pub fn value_at_risk_pct_wasm(&mut self, confidence: f64) -> Option<f64> { + self.value_at_risk_percent(confidence) + } + #[wasm_bindgen(js_name = "valueAtRisk")] - pub fn value_at_risk_wasm(&mut self, confidence: f64) -> Option<f64> { - self.value_at_risk(confidence) + pub fn value_at_risk_wasm(&mut self, confidence: f64, initial_investment: f64) -> Option<f64> { + self.value_at_risk(confidence, initial_investment) } } diff --git a/finlib/src/risk/forecast/mod.rs b/finlib/src/risk/forecast/mod.rs new file mode 100644 index 0000000..e484c0d --- /dev/null +++ b/finlib/src/risk/forecast/mod.rs @@ -0,0 +1,9 @@ +use statrs::distribution::{ContinuousCDF, Normal}; + +pub fn mean_investment(portfolio_mean_change: f64, initial_investment: f64) -> f64 { + (1. + portfolio_mean_change) * initial_investment +} + +pub fn std_dev_investment(portfolio_change_stddev: f64, initial_investment: f64) -> f64 { + portfolio_change_stddev * initial_investment +} \ No newline at end of file diff --git a/finlib/src/risk/mod.rs b/finlib/src/risk/mod.rs index bc8efc9..1411c4b 100644 --- a/finlib/src/risk/mod.rs +++ b/finlib/src/risk/mod.rs @@ -1,2 +1,3 @@ pub mod var; pub mod portfolio; +pub mod forecast; diff --git a/finlib/src/risk/portfolio.rs b/finlib/src/risk/portfolio.rs index 0340a39..3adade4 100644 --- a/finlib/src/risk/portfolio.rs +++ b/finlib/src/risk/portfolio.rs @@ -4,7 +4,7 @@ use ndarray_stats::CorrelationExt; use wasm_bindgen::prelude::*; #[cfg(feature = "py")] use pyo3::prelude::*; -use crate::risk::var::varcovar::portfolio_value_at_risk; +use crate::risk::var::varcovar::{portfolio_value_at_risk, portfolio_value_at_risk_percent}; use crate::stats; use crate::util::roc::rates_of_change; @@ -170,8 +170,12 @@ impl Portfolio { Some((porfolio_mean_return, portfolio_stddev)) } - pub fn value_at_risk(&mut self, confidence: f64) -> Option<f64> { - portfolio_value_at_risk(self, confidence) + pub fn value_at_risk(&mut self, confidence: f64, initial_investment: f64) -> Option<f64> { + portfolio_value_at_risk(self, confidence, initial_investment) + } + + pub fn value_at_risk_percent(&mut self, confidence: f64) -> Option<f64> { + portfolio_value_at_risk_percent(self, confidence) } } diff --git a/finlib/src/risk/var/varcovar.rs b/finlib/src/risk/var/varcovar.rs index 06b0f08..cb74953 100644 --- a/finlib/src/risk/var/varcovar.rs +++ b/finlib/src/risk/var/varcovar.rs @@ -1,34 +1,63 @@ +use log::info; use crate::stats; use crate::util::roc::rates_of_change; -use ndarray_stats::CorrelationExt; use crate::risk::portfolio::Portfolio; #[cfg(feature = "parallel")] use rayon::prelude::*; use statrs::distribution::{ContinuousCDF, Normal}; +use crate::risk::forecast::{mean_investment, std_dev_investment}; // https://medium.com/@serdarilarslan/value-at-risk-var-and-its-implementation-in-python-5c9150f73b0e -pub fn value_at_risk(values: &[f64], confidence: f64) -> f64 { +pub fn value_at_risk_percent(values: &[f64], confidence: f64) -> f64 { let roc = rates_of_change(values).collect::<Vec<_>>(); let mean = stats::mean(&roc); let std_dev = stats::sample_std_dev(&roc); - let n = Normal::new(0.0, 1.0).unwrap(); + let n = Normal::new(mean, std_dev).unwrap(); - mean + std_dev * n.inverse_cdf(confidence) + n.inverse_cdf(confidence) } -pub fn portfolio_value_at_risk(portfolio: &mut Portfolio, confidence: f64) -> Option<f64> { +pub fn portfolio_value_at_risk_percent(portfolio: &mut Portfolio, confidence: f64) -> Option<f64> { match portfolio.get_mean_and_std() { None => None, Some((mean, std_dev)) => { - let n = Normal::new(0.0, 1.0).unwrap(); - Some(mean + std_dev * n.inverse_cdf(confidence)) + let n = Normal::new(mean, std_dev).unwrap(); + Some(n.inverse_cdf(confidence)) } } } +pub fn portfolio_value_at_risk(portfolio: &mut Portfolio, confidence: f64, initial_investment: f64) -> Option<f64> { + match portfolio.get_mean_and_std() { + None => None, + Some((mean, std_dev)) => { + let investment_mean = mean_investment(mean, initial_investment); + let investment_std_dev = std_dev_investment(std_dev, std_dev); + + info!("{:?}, {:?}", investment_mean, investment_std_dev); + + let investment_var = investment_value_at_risk(confidence, investment_mean, investment_std_dev); + + println!("{:?}", investment_var); + + Some(initial_investment - investment_var) + } + } +} + +pub fn investment_value_at_risk(confidence: f64, investment_mean: f64, investment_std_dev: f64) -> f64 { + let n = Normal::new(investment_mean, investment_std_dev).unwrap(); + + n.inverse_cdf(confidence) +} + +pub fn scale_value_at_risk(initial_value: f64, time_cycles: isize) -> f64 { + initial_value * f64::sqrt(time_cycles as f64) +} + #[cfg(test)] mod tests { use super::*; @@ -43,7 +72,7 @@ mod tests { let mut portfolio = Portfolio::from(assets); - portfolio_value_at_risk(&mut portfolio, 0.1); + portfolio_value_at_risk_percent(&mut portfolio, 0.1); } @@ -55,6 +84,20 @@ mod tests { let mut portfolio = Portfolio::from(assets); - portfolio_value_at_risk(&mut portfolio, 0.1); + portfolio_value_at_risk_percent(&mut portfolio, 0.1); + } + + #[test] + fn var_test_one_asset_investment() { + let assets = vec![ + PortfolioAsset::new(1., "awdad".to_string(), vec![10., 9., 8., 7.]) + // PortfolioAsset::new(1., "awdad".to_string(), vec![2.1, 2., 2.1, 1., 1.]) + ]; + + let mut portfolio = Portfolio::from(assets); + + println!("{:?}", portfolio_value_at_risk(&mut portfolio, 0.01, 1_000_000.)); + println!("{:?}", portfolio_value_at_risk(&mut portfolio, 0.1, 1_000_000.)); + println!("{:?}", portfolio_value_at_risk(&mut portfolio, 0.5, 1_000_000.)); } } \ No newline at end of file diff --git a/notebooks/historical_var.ipynb b/notebooks/historical_var.ipynb index 1d4bc74..fee8740 100644 --- a/notebooks/historical_var.ipynb +++ b/notebooks/historical_var.ipynb @@ -31,281 +31,6 @@ "outputs": [], "execution_count": 2 }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2025-02-14T22:39:50.200378Z", - "start_time": "2025-02-14T22:39:50.192064Z" - } - }, - "cell_type": "code", - "source": "aapl.results", - "id": "ba361e8697a2e425", - "outputs": [ - { - "data": { - "text/plain": [ - "[YFinanceEquityHistoricalData(date=2024-02-14, open=185.32000732421875, high=185.52999877929688, low=182.44000244140625, close=184.14999389648438, volume=54630500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-15, open=183.5500030517578, high=184.49000549316406, low=181.35000610351562, close=183.86000061035156, volume=65434500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-16, open=183.4199981689453, high=184.85000610351562, low=181.6699981689453, close=182.30999755859375, volume=49701400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-20, open=181.7899932861328, high=182.42999267578125, low=180.0, close=181.55999755859375, volume=53665600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-21, open=181.94000244140625, high=182.88999938964844, low=180.66000366210938, close=182.32000732421875, volume=41529700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-22, open=183.47999572753906, high=184.9600067138672, low=182.4600067138672, close=184.3699951171875, volume=52292200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-23, open=185.00999450683594, high=185.0399932861328, low=182.22999572753906, close=182.52000427246094, volume=45119700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-26, open=182.24000549316406, high=182.75999450683594, low=180.64999389648438, close=181.16000366210938, volume=40867400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-27, open=181.10000610351562, high=183.9199981689453, low=179.55999755859375, close=182.6300048828125, volume=54318900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-28, open=182.50999450683594, high=183.1199951171875, low=180.1300048828125, close=181.4199981689453, volume=48953900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-29, open=181.27000427246094, high=182.57000732421875, low=179.52999877929688, close=180.75, volume=136682600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-01, open=179.5500030517578, high=180.52999877929688, low=177.3800048828125, close=179.66000366210938, volume=73488000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-04, open=176.14999389648438, high=176.89999389648438, low=173.7899932861328, close=175.10000610351562, volume=81510100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-05, open=170.75999450683594, high=172.0399932861328, low=169.6199951171875, close=170.1199951171875, volume=95132400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-06, open=171.05999755859375, high=171.24000549316406, low=168.67999267578125, close=169.1199951171875, volume=68587700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-07, open=169.14999389648438, high=170.72999572753906, low=168.49000549316406, close=169.0, volume=71765100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-08, open=169.0, high=173.6999969482422, low=168.94000244140625, close=170.72999572753906, volume=76114600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-11, open=172.94000244140625, high=174.3800048828125, low=172.0500030517578, close=172.75, volume=60139500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-12, open=173.14999389648438, high=174.02999877929688, low=171.00999450683594, close=173.22999572753906, volume=59825400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-13, open=172.77000427246094, high=173.19000244140625, low=170.75999450683594, close=171.1300048828125, volume=52488700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-14, open=172.91000366210938, high=174.30999755859375, low=172.0500030517578, close=173.0, volume=72913500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-15, open=171.1699981689453, high=172.6199951171875, low=170.2899932861328, close=172.6199951171875, volume=121664700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-18, open=175.57000732421875, high=177.7100067138672, low=173.52000427246094, close=173.72000122070312, volume=75604200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-19, open=174.33999633789062, high=176.61000061035156, low=173.02999877929688, close=176.0800018310547, volume=55215200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-20, open=175.72000122070312, high=178.6699981689453, low=175.08999633789062, close=178.6699981689453, volume=53423100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-21, open=177.0500030517578, high=177.49000549316406, low=170.83999633789062, close=171.3699951171875, volume=106181300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-22, open=171.75999450683594, high=173.0500030517578, low=170.05999755859375, close=172.27999877929688, volume=71106600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-25, open=170.57000732421875, high=171.94000244140625, low=169.4499969482422, close=170.85000610351562, volume=54288300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-26, open=170.0, high=171.4199981689453, low=169.5800018310547, close=169.7100067138672, volume=57388400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-27, open=170.41000366210938, high=173.60000610351562, low=170.11000061035156, close=173.30999755859375, volume=60273300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-28, open=171.75, high=172.22999572753906, low=170.50999450683594, close=171.47999572753906, volume=65672700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-01, open=171.19000244140625, high=171.25, low=169.47999572753906, close=170.02999877929688, volume=46240500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-02, open=169.0800018310547, high=169.33999633789062, low=168.22999572753906, close=168.83999633789062, volume=49329500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-03, open=168.7899932861328, high=170.67999267578125, low=168.5800018310547, close=169.64999389648438, volume=47691700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-04, open=170.2899932861328, high=171.9199981689453, low=168.82000732421875, close=168.82000732421875, volume=53704400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-05, open=169.58999633789062, high=170.38999938964844, low=168.9499969482422, close=169.5800018310547, volume=42055200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-08, open=169.02999877929688, high=169.1999969482422, low=168.24000549316406, close=168.4499969482422, volume=37425500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-09, open=168.6999969482422, high=170.0800018310547, low=168.35000610351562, close=169.6699981689453, volume=42451200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-10, open=168.8000030517578, high=169.08999633789062, low=167.11000061035156, close=167.77999877929688, volume=49709300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-11, open=168.33999633789062, high=175.4600067138672, low=168.16000366210938, close=175.0399932861328, volume=91070300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-12, open=174.25999450683594, high=178.36000061035156, low=174.2100067138672, close=176.5500030517578, volume=101593300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-15, open=175.36000061035156, high=176.6300048828125, low=172.5, close=172.69000244140625, volume=73531800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-16, open=171.75, high=173.75999450683594, low=168.27000427246094, close=169.3800048828125, volume=73711200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-17, open=169.61000061035156, high=170.64999389648438, low=168.0, close=168.0, volume=50901200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-18, open=168.02999877929688, high=168.63999938964844, low=166.5500030517578, close=167.0399932861328, volume=43122900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-19, open=166.2100067138672, high=166.39999389648438, low=164.0800018310547, close=165.0, volume=67772100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-22, open=165.52000427246094, high=167.25999450683594, low=164.77000427246094, close=165.83999633789062, volume=48116400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-23, open=165.35000610351562, high=167.0500030517578, low=164.9199981689453, close=166.89999389648438, volume=49537800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-24, open=166.5399932861328, high=169.3000030517578, low=166.2100067138672, close=169.02000427246094, volume=48251800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-25, open=169.52999877929688, high=170.61000061035156, low=168.14999389648438, close=169.88999938964844, volume=50558300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-26, open=169.8800048828125, high=171.33999633789062, low=169.17999267578125, close=169.3000030517578, volume=44838400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-29, open=173.3699951171875, high=176.02999877929688, low=173.10000610351562, close=173.5, volume=68169400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-30, open=173.3300018310547, high=174.99000549316406, low=170.0, close=170.3300018310547, volume=65934800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-01, open=169.5800018310547, high=172.7100067138672, low=169.11000061035156, close=169.3000030517578, volume=50383100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-02, open=172.50999450683594, high=173.4199981689453, low=170.88999938964844, close=173.02999877929688, volume=94214900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-03, open=186.64999389648438, high=187.0, low=182.66000366210938, close=183.3800048828125, volume=163224100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-06, open=182.35000610351562, high=184.1999969482422, low=180.4199981689453, close=181.7100067138672, volume=78569700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-07, open=183.4499969482422, high=184.89999389648438, low=181.32000732421875, close=182.39999389648438, volume=77305800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-08, open=182.85000610351562, high=183.07000732421875, low=181.4499969482422, close=182.74000549316406, volume=45057100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-09, open=182.55999755859375, high=184.66000366210938, low=182.11000061035156, close=184.57000732421875, volume=48983000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-10, open=184.89999389648438, high=185.08999633789062, low=182.1300048828125, close=183.0500030517578, volume=50759500, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-05-13, open=185.44000244140625, high=187.10000610351562, low=184.6199951171875, close=186.27999877929688, volume=72044800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-14, open=187.50999450683594, high=188.3000030517578, low=186.2899932861328, close=187.42999267578125, volume=52393600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-15, open=187.91000366210938, high=190.64999389648438, low=187.3699951171875, close=189.72000122070312, volume=70400000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-16, open=190.47000122070312, high=191.10000610351562, low=189.66000366210938, close=189.83999633789062, volume=52845200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-17, open=189.50999450683594, high=190.80999755859375, low=189.17999267578125, close=189.8699951171875, volume=41282900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-20, open=189.3300018310547, high=191.9199981689453, low=189.00999450683594, close=191.0399932861328, volume=44361300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-21, open=191.08999633789062, high=192.72999572753906, low=190.9199981689453, close=192.35000610351562, volume=42309400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-22, open=192.27000427246094, high=192.82000732421875, low=190.27000427246094, close=190.89999389648438, volume=34648500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-23, open=190.97999572753906, high=191.0, low=186.6300048828125, close=186.8800048828125, volume=51005900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-24, open=188.82000732421875, high=190.5800018310547, low=188.0399932861328, close=189.97999572753906, volume=36294600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-28, open=191.50999450683594, high=193.0, low=189.10000610351562, close=189.99000549316406, volume=52280100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-29, open=189.61000061035156, high=192.25, low=189.50999450683594, close=190.2899932861328, volume=53068000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-30, open=190.75999450683594, high=192.17999267578125, low=190.6300048828125, close=191.2899932861328, volume=49947900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-31, open=191.44000244140625, high=192.57000732421875, low=189.91000366210938, close=192.25, volume=75158300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-03, open=192.89999389648438, high=194.99000549316406, low=192.52000427246094, close=194.02999877929688, volume=50080500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-04, open=194.63999938964844, high=195.32000732421875, low=193.02999877929688, close=194.35000610351562, volume=47471400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-05, open=195.39999389648438, high=196.89999389648438, low=194.8699951171875, close=195.8699951171875, volume=54156800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-06, open=195.69000244140625, high=196.5, low=194.1699981689453, close=194.47999572753906, volume=41181800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-07, open=194.64999389648438, high=196.94000244140625, low=194.13999938964844, close=196.88999938964844, volume=53103900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-10, open=196.89999389648438, high=197.3000030517578, low=192.14999389648438, close=193.1199951171875, volume=97262100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-11, open=193.64999389648438, high=207.16000366210938, low=193.6300048828125, close=207.14999389648438, volume=172373300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-12, open=207.3699951171875, high=220.1999969482422, low=206.89999389648438, close=213.07000732421875, volume=198134300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-13, open=214.74000549316406, high=216.75, low=211.60000610351562, close=214.24000549316406, volume=97862700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-14, open=213.85000610351562, high=215.1699981689453, low=211.3000030517578, close=212.49000549316406, volume=70122700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-17, open=213.3699951171875, high=218.9499969482422, low=212.72000122070312, close=216.6699981689453, volume=93728300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-18, open=217.58999633789062, high=218.6300048828125, low=213.0, close=214.2899932861328, volume=79943300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-20, open=213.92999267578125, high=214.24000549316406, low=208.85000610351562, close=209.67999267578125, volume=86172500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-21, open=210.38999938964844, high=211.88999938964844, low=207.11000061035156, close=207.49000549316406, volume=246421400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-24, open=207.72000122070312, high=212.6999969482422, low=206.58999633789062, close=208.13999938964844, volume=80727000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-25, open=209.14999389648438, high=211.3800048828125, low=208.61000061035156, close=209.07000732421875, volume=56713900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-26, open=211.5, high=214.86000061035156, low=210.63999938964844, close=213.25, volume=66213200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-27, open=214.69000244140625, high=215.74000549316406, low=212.35000610351562, close=214.10000610351562, volume=49772700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-28, open=215.77000427246094, high=216.07000732421875, low=210.3000030517578, close=210.6199951171875, volume=82542700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-01, open=212.08999633789062, high=217.50999450683594, low=211.9199981689453, close=216.75, volume=60402900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-02, open=216.14999389648438, high=220.3800048828125, low=215.10000610351562, close=220.27000427246094, volume=58046200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-03, open=220.0, high=221.5500030517578, low=219.02999877929688, close=221.5500030517578, volume=37369800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-05, open=221.64999389648438, high=226.4499969482422, low=221.64999389648438, close=226.33999633789062, volume=60412400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-08, open=227.08999633789062, high=227.85000610351562, low=223.25, close=227.82000732421875, volume=59085900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-09, open=227.92999267578125, high=229.39999389648438, low=226.3699951171875, close=228.67999267578125, volume=48076100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-10, open=229.3000030517578, high=233.0800018310547, low=229.25, close=232.97999572753906, volume=62627700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-11, open=231.38999938964844, high=232.38999938964844, low=225.77000427246094, close=227.57000732421875, volume=64710600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-12, open=228.9199981689453, high=232.63999938964844, low=228.67999267578125, close=230.5399932861328, volume=53046500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-15, open=236.47999572753906, high=237.22999572753906, low=233.08999633789062, close=234.39999389648438, volume=62631300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-16, open=235.0, high=236.27000427246094, low=232.3300018310547, close=234.82000732421875, volume=43234300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-17, open=229.4499969482422, high=231.4600067138672, low=226.63999938964844, close=228.8800048828125, volume=57345900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-18, open=230.27999877929688, high=230.44000244140625, low=222.27000427246094, close=224.17999267578125, volume=66034600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-19, open=224.82000732421875, high=226.8000030517578, low=223.27999877929688, close=224.30999755859375, volume=49151500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-22, open=227.00999450683594, high=227.77999877929688, low=223.08999633789062, close=223.9600067138672, volume=48201800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-23, open=224.3699951171875, high=226.94000244140625, low=222.67999267578125, close=225.00999450683594, volume=39960300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-24, open=224.0, high=224.8000030517578, low=217.1300048828125, close=218.5399932861328, volume=61777600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-25, open=218.92999267578125, high=220.85000610351562, low=214.6199951171875, close=217.49000549316406, volume=51391200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-26, open=218.6999969482422, high=219.49000549316406, low=216.00999450683594, close=217.9600067138672, volume=41601300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-29, open=216.9600067138672, high=219.3000030517578, low=215.75, close=218.24000549316406, volume=36311800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-30, open=219.19000244140625, high=220.3300018310547, low=216.1199951171875, close=218.8000030517578, volume=41643800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-31, open=221.44000244140625, high=223.82000732421875, low=220.6300048828125, close=222.0800018310547, volume=50036300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-01, open=224.3699951171875, high=224.47999572753906, low=217.02000427246094, close=218.36000061035156, volume=62501000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-02, open=219.14999389648438, high=225.60000610351562, low=217.7100067138672, close=219.86000061035156, volume=105568600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-05, open=199.08999633789062, high=213.5, low=196.0, close=209.27000427246094, volume=119548600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-06, open=205.3000030517578, high=209.99000549316406, low=201.07000732421875, close=207.22999572753906, volume=69660500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-07, open=206.89999389648438, high=213.63999938964844, low=206.38999938964844, close=209.82000732421875, volume=63516400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-08, open=213.11000061035156, high=214.1999969482422, low=208.8300018310547, close=213.30999755859375, volume=47161100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-09, open=212.10000610351562, high=216.77999877929688, low=211.97000122070312, close=216.24000549316406, volume=42201600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-12, open=216.07000732421875, high=219.50999450683594, low=215.60000610351562, close=217.52999877929688, volume=38028100, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-08-13, open=219.00999450683594, high=221.88999938964844, low=219.00999450683594, close=221.27000427246094, volume=44155300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-14, open=220.57000732421875, high=223.02999877929688, low=219.6999969482422, close=221.72000122070312, volume=41960600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-15, open=224.60000610351562, high=225.35000610351562, low=222.75999450683594, close=224.72000122070312, volume=46414000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-16, open=223.9199981689453, high=226.8300018310547, low=223.64999389648438, close=226.0500030517578, volume=44340200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-19, open=225.72000122070312, high=225.99000549316406, low=223.0399932861328, close=225.88999938964844, volume=40687800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-20, open=225.77000427246094, high=227.1699981689453, low=225.4499969482422, close=226.50999450683594, volume=30299000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-21, open=226.52000427246094, high=227.97999572753906, low=225.0500030517578, close=226.39999389648438, volume=34765500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-22, open=227.7899932861328, high=228.33999633789062, low=223.89999389648438, close=224.52999877929688, volume=43695300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-23, open=225.66000366210938, high=228.22000122070312, low=224.3300018310547, close=226.83999633789062, volume=38677300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-26, open=226.75999450683594, high=227.27999877929688, low=223.88999938964844, close=227.17999267578125, volume=30602200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-27, open=226.0, high=228.85000610351562, low=224.88999938964844, close=228.02999877929688, volume=35934600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-28, open=227.9199981689453, high=229.86000061035156, low=225.67999267578125, close=226.49000549316406, volume=38052200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-29, open=230.10000610351562, high=232.9199981689453, low=228.8800048828125, close=229.7899932861328, volume=51906300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-30, open=230.19000244140625, high=230.39999389648438, low=227.47999572753906, close=229.0, volume=52990800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-03, open=228.5500030517578, high=229.0, low=221.1699981689453, close=222.77000427246094, volume=50190600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-04, open=221.66000366210938, high=221.77999877929688, low=217.47999572753906, close=220.85000610351562, volume=43840200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-05, open=221.6300048828125, high=225.47999572753906, low=221.52000427246094, close=222.3800048828125, volume=36615400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-06, open=223.9499969482422, high=225.24000549316406, low=219.77000427246094, close=220.82000732421875, volume=48423000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-09, open=220.82000732421875, high=221.27000427246094, low=216.7100067138672, close=220.91000366210938, volume=67180000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-10, open=218.9199981689453, high=221.47999572753906, low=216.72999572753906, close=220.11000061035156, volume=51591000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-11, open=221.4600067138672, high=223.08999633789062, low=217.88999938964844, close=222.66000366210938, volume=44587100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-12, open=222.5, high=223.5500030517578, low=219.82000732421875, close=222.77000427246094, volume=37498200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-13, open=223.5800018310547, high=224.0399932861328, low=221.91000366210938, close=222.5, volume=36766600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-16, open=216.5399932861328, high=217.22000122070312, low=213.9199981689453, close=216.32000732421875, volume=59357400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-17, open=215.75, high=216.89999389648438, low=214.5, close=216.7899932861328, volume=45519300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-18, open=217.5500030517578, high=222.7100067138672, low=217.5399932861328, close=220.69000244140625, volume=59894900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-19, open=224.99000549316406, high=229.82000732421875, low=224.6300048828125, close=228.8699951171875, volume=66781300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-20, open=229.97000122070312, high=233.08999633789062, low=227.6199951171875, close=228.1999969482422, volume=318679900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-23, open=227.33999633789062, high=229.4499969482422, low=225.80999755859375, close=226.47000122070312, volume=54146000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-24, open=228.64999389648438, high=229.35000610351562, low=225.72999572753906, close=227.3699951171875, volume=43556100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-25, open=224.92999267578125, high=227.2899932861328, low=224.02000427246094, close=226.3699951171875, volume=42308700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-26, open=227.3000030517578, high=228.5, low=225.41000366210938, close=227.52000427246094, volume=36636700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-27, open=228.4600067138672, high=229.52000427246094, low=227.3000030517578, close=227.7899932861328, volume=34026000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-30, open=230.0399932861328, high=233.0, low=229.64999389648438, close=233.0, volume=54541900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-01, open=229.52000427246094, high=229.64999389648438, low=223.74000549316406, close=226.2100067138672, volume=63285000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-02, open=225.88999938964844, high=227.3699951171875, low=223.02000427246094, close=226.77999877929688, volume=32880600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-03, open=225.13999938964844, high=226.80999755859375, low=223.32000732421875, close=225.6699981689453, volume=34044200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-04, open=227.89999389648438, high=228.0, low=224.1300048828125, close=226.8000030517578, volume=37245100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-07, open=224.5, high=225.69000244140625, low=221.3300018310547, close=221.69000244140625, volume=39505400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-08, open=224.3000030517578, high=225.97999572753906, low=223.25, close=225.77000427246094, volume=31855700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-09, open=225.22999572753906, high=229.75, low=224.8300018310547, close=229.5399932861328, volume=33591100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-10, open=227.77999877929688, high=229.5, low=227.1699981689453, close=229.0399932861328, volume=28183500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-11, open=229.3000030517578, high=229.41000366210938, low=227.33999633789062, close=227.5500030517578, volume=31759200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-14, open=228.6999969482422, high=231.72999572753906, low=228.60000610351562, close=231.3000030517578, volume=39882100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-15, open=233.61000061035156, high=237.49000549316406, low=232.3699951171875, close=233.85000610351562, volume=64751400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-16, open=231.60000610351562, high=232.1199951171875, low=229.83999633789062, close=231.77999877929688, volume=34082200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-17, open=233.42999267578125, high=233.85000610351562, low=230.52000427246094, close=232.14999389648438, volume=32993800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-18, open=236.17999267578125, high=236.17999267578125, low=234.00999450683594, close=235.0, volume=46431500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-21, open=234.4499969482422, high=236.85000610351562, low=234.4499969482422, close=236.47999572753906, volume=36254500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-22, open=233.88999938964844, high=236.22000122070312, low=232.60000610351562, close=235.86000061035156, volume=38846600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-23, open=234.0800018310547, high=235.13999938964844, low=227.75999450683594, close=230.75999450683594, volume=52287000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-24, open=229.97999572753906, high=230.82000732421875, low=228.41000366210938, close=230.57000732421875, volume=31109500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-25, open=229.74000549316406, high=233.22000122070312, low=229.57000732421875, close=231.41000366210938, volume=38802300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-28, open=233.32000732421875, high=234.72999572753906, low=232.5500030517578, close=233.39999389648438, volume=36087100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-29, open=233.10000610351562, high=234.3300018310547, low=232.32000732421875, close=233.6699981689453, volume=35417200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-30, open=232.61000061035156, high=233.47000122070312, low=229.5500030517578, close=230.10000610351562, volume=47070900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-31, open=229.33999633789062, high=229.8300018310547, low=225.3699951171875, close=225.91000366210938, volume=64370100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-01, open=220.97000122070312, high=225.35000610351562, low=220.27000427246094, close=222.91000366210938, volume=65276700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-04, open=220.99000549316406, high=222.7899932861328, low=219.7100067138672, close=222.00999450683594, volume=44944500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-05, open=221.8000030517578, high=223.9499969482422, low=221.13999938964844, close=223.4499969482422, volume=28111300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-06, open=222.61000061035156, high=226.07000732421875, low=221.19000244140625, close=222.72000122070312, volume=54561100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-07, open=224.6300048828125, high=227.8800048828125, low=224.57000732421875, close=227.47999572753906, volume=42137700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-08, open=227.1699981689453, high=228.66000366210938, low=226.41000366210938, close=226.9600067138672, volume=38328800, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-11-11, open=225.0, high=225.6999969482422, low=221.5, close=224.22999572753906, volume=42005600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-12, open=224.5500030517578, high=225.58999633789062, low=223.36000061035156, close=224.22999572753906, volume=40398300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-13, open=224.00999450683594, high=226.64999389648438, low=222.75999450683594, close=225.1199951171875, volume=48566200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-14, open=225.02000427246094, high=228.8699951171875, low=225.0, close=228.22000122070312, volume=44923900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-15, open=226.39999389648438, high=226.9199981689453, low=224.27000427246094, close=225.0, volume=47923700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-18, open=225.25, high=229.74000549316406, low=225.1699981689453, close=228.02000427246094, volume=44686000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-19, open=226.97999572753906, high=230.16000366210938, low=226.66000366210938, close=228.27999877929688, volume=36211800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-20, open=228.05999755859375, high=229.92999267578125, low=225.88999938964844, close=229.0, volume=35169600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-21, open=228.8800048828125, high=230.16000366210938, low=225.7100067138672, close=228.52000427246094, volume=42108300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-22, open=228.05999755859375, high=230.72000122070312, low=228.05999755859375, close=229.8699951171875, volume=38168300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-25, open=231.4600067138672, high=233.25, low=229.74000549316406, close=232.8699951171875, volume=90152800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-26, open=233.3300018310547, high=235.57000732421875, low=233.3300018310547, close=235.05999755859375, volume=45986200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-27, open=234.47000122070312, high=235.69000244140625, low=233.80999755859375, close=234.92999267578125, volume=33498400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-29, open=234.80999755859375, high=237.80999755859375, low=233.97000122070312, close=237.3300018310547, volume=28481400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-02, open=237.27000427246094, high=240.7899932861328, low=237.16000366210938, close=239.58999633789062, volume=48137100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-03, open=239.80999755859375, high=242.75999450683594, low=238.89999389648438, close=242.64999389648438, volume=38861000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-04, open=242.8699951171875, high=244.11000061035156, low=241.25, close=243.00999450683594, volume=44383900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-05, open=243.99000549316406, high=244.5399932861328, low=242.1300048828125, close=243.0399932861328, volume=40033900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-06, open=242.91000366210938, high=244.6300048828125, low=242.0800018310547, close=242.83999633789062, volume=36870600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-09, open=241.8300018310547, high=247.24000549316406, low=241.75, close=246.75, volume=44649200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-10, open=246.88999938964844, high=248.2100067138672, low=245.33999633789062, close=247.77000427246094, volume=36914800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-11, open=247.9600067138672, high=250.8000030517578, low=246.25999450683594, close=246.49000549316406, volume=45205800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-12, open=246.88999938964844, high=248.74000549316406, low=245.67999267578125, close=247.9600067138672, volume=32777500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-13, open=247.82000732421875, high=249.2899932861328, low=246.24000549316406, close=248.1300048828125, volume=33155300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-16, open=247.99000549316406, high=251.3800048828125, low=247.64999389648438, close=251.0399932861328, volume=51694800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-17, open=250.0800018310547, high=253.8300018310547, low=249.77999877929688, close=253.47999572753906, volume=51356400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-18, open=252.16000366210938, high=254.27999877929688, low=247.74000549316406, close=248.0500030517578, volume=56774100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-19, open=247.5, high=252.0, low=247.08999633789062, close=249.7899932861328, volume=60882300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-20, open=248.0399932861328, high=255.0, low=245.69000244140625, close=254.49000549316406, volume=147495300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-23, open=254.77000427246094, high=255.64999389648438, low=253.4499969482422, close=255.27000427246094, volume=40858800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-24, open=255.49000549316406, high=258.2099914550781, low=255.2899932861328, close=258.20001220703125, volume=23234700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-26, open=258.19000244140625, high=260.1000061035156, low=257.6300048828125, close=259.0199890136719, volume=27237100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-27, open=257.8299865722656, high=258.70001220703125, low=253.05999755859375, close=255.58999633789062, volume=42355300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-30, open=252.22999572753906, high=253.5, low=250.75, close=252.1999969482422, volume=35557500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-31, open=252.44000244140625, high=253.27999877929688, low=249.42999267578125, close=250.4199981689453, volume=39480700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-02, open=248.92999267578125, high=249.10000610351562, low=241.82000732421875, close=243.85000610351562, volume=55740700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-03, open=243.36000061035156, high=244.17999267578125, low=241.88999938964844, close=243.36000061035156, volume=40244100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-06, open=244.30999755859375, high=247.3300018310547, low=243.1999969482422, close=245.0, volume=45045600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-07, open=242.97999572753906, high=245.5500030517578, low=241.35000610351562, close=242.2100067138672, volume=40856000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-08, open=241.9199981689453, high=243.7100067138672, low=240.0500030517578, close=242.6999969482422, volume=37628900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-10, open=240.00999450683594, high=240.16000366210938, low=233.0, close=236.85000610351562, volume=61710900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-13, open=233.52999877929688, high=234.6699981689453, low=229.72000122070312, close=234.39999389648438, volume=49630700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-14, open=234.75, high=236.1199951171875, low=232.47000122070312, close=233.27999877929688, volume=39435300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-15, open=234.63999938964844, high=238.9600067138672, low=234.42999267578125, close=237.8699951171875, volume=39832000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-16, open=237.35000610351562, high=238.00999450683594, low=228.02999877929688, close=228.25999450683594, volume=71759100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-17, open=232.1199951171875, high=232.2899932861328, low=228.47999572753906, close=229.97999572753906, volume=68488300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-21, open=224.0, high=224.4199981689453, low=219.3800048828125, close=222.63999938964844, volume=98070400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-22, open=219.7899932861328, high=224.1199951171875, low=219.7899932861328, close=223.8300018310547, volume=64126500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-23, open=224.74000549316406, high=227.02999877929688, low=222.3000030517578, close=223.66000366210938, volume=60234800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-24, open=224.77999877929688, high=225.6300048828125, low=221.41000366210938, close=222.77999877929688, volume=54697900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-27, open=224.02000427246094, high=232.14999389648438, low=223.97999572753906, close=229.86000061035156, volume=94863400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-28, open=230.85000610351562, high=240.19000244140625, low=230.80999755859375, close=238.25999450683594, volume=75707600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-29, open=234.1199951171875, high=239.86000061035156, low=234.00999450683594, close=239.36000061035156, volume=45486100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-30, open=238.6699981689453, high=240.7899932861328, low=237.2100067138672, close=237.58999633789062, volume=55658300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-31, open=247.19000244140625, high=247.19000244140625, low=233.44000244140625, close=236.0, volume=101075100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-03, open=229.99000549316406, high=231.8300018310547, low=225.6999969482422, close=228.00999450683594, volume=73063300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-04, open=227.25, high=233.1300048828125, low=226.64999389648438, close=232.8000030517578, volume=45067300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-05, open=228.52999877929688, high=232.6699981689453, low=228.27000427246094, close=232.47000122070312, volume=39620300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-06, open=231.2899932861328, high=233.8000030517578, low=230.42999267578125, close=233.22000122070312, volume=29925300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-07, open=232.60000610351562, high=234.0, low=227.25999450683594, close=227.6300048828125, volume=39707200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-10, open=229.57000732421875, high=230.58999633789062, low=227.1999969482422, close=227.64999389648438, volume=33115600, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2025-02-11, open=228.1999969482422, high=235.22999572753906, low=228.1300048828125, close=232.6199951171875, volume=53718400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-12, open=231.1999969482422, high=236.9600067138672, low=230.67999267578125, close=236.8699951171875, volume=45243300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-13, open=236.91000366210938, high=242.33999633789062, low=235.57000732421875, close=241.52999877929688, volume=53614100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-14, open=241.07000732421875, high=245.41000366210938, low=241.0, close=244.60000610351562, volume=40145605, vwap=None, split_ratio=None, dividend=0.0)]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 3 - }, { "metadata": { "ExecuteTime": { diff --git a/notebooks/interviewqs_sample.ipynb b/notebooks/interviewqs_sample.ipynb new file mode 100644 index 0000000..96c93fb --- /dev/null +++ b/notebooks/interviewqs_sample.ipynb @@ -0,0 +1,347 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "initial_id", + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2025-02-15T23:03:06.288017Z", + "start_time": "2025-02-15T23:03:00.795664Z" + } + }, + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from openbb import obb\n", + "import datetime as dt\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Create our portfolio of equities\n", + "tickers = ['AAPL','META', 'C', 'DIS']\n", + "\n", + "# Set the investment weights (I arbitrarily picked for example)\n", + "weights = np.array([.25, .3, .15, .3])\n", + "\n", + "# Set an initial investment level\n", + "initial_investment = 1000000\n", + "\n", + "# Download closing prices\n", + "data = (obb.equity.price.historical(symbol=tickers, provider='yfinance')\n", + " .to_df()\n", + " .drop(columns=['open', 'high', 'low', 'volume', 'dividend'])\n", + " .pivot(columns='symbol'))\n", + "\n", + "#From the closing prices, calculate periodic returns\n", + "returns = data.pct_change()\n", + "\n", + "# returns.tail()" + ], + "outputs": [], + "execution_count": 1 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-15T22:25:07.699602Z", + "start_time": "2025-02-15T22:25:07.694945Z" + } + }, + "cell_type": "code", + "source": [ + "# Generate Var-Cov matrix\n", + "cov_matrix = returns.cov()\n", + "cov_matrix" + ], + "id": "146c7f1b5a34b41a", + "outputs": [ + { + "data": { + "text/plain": [ + " close \n", + "symbol AAPL C DIS META\n", + " symbol \n", + "close AAPL 0.000227 0.000039 0.000015 0.000080\n", + " C 0.000039 0.000291 0.000079 0.000063\n", + " DIS 0.000015 0.000079 0.000202 0.000023\n", + " META 0.000080 0.000063 0.000023 0.000363" + ], + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead tr th {\n", + " text-align: left;\n", + " }\n", + "\n", + " .dataframe thead tr:last-of-type th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr>\n", + " <th></th>\n", + " <th></th>\n", + " <th colspan=\"4\" halign=\"left\">close</th>\n", + " </tr>\n", + " <tr>\n", + " <th></th>\n", + " <th>symbol</th>\n", + " <th>AAPL</th>\n", + " <th>C</th>\n", + " <th>DIS</th>\n", + " <th>META</th>\n", + " </tr>\n", + " <tr>\n", + " <th></th>\n", + " <th>symbol</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th rowspan=\"4\" valign=\"top\">close</th>\n", + " <th>AAPL</th>\n", + " <td>0.000227</td>\n", + " <td>0.000039</td>\n", + " <td>0.000015</td>\n", + " <td>0.000080</td>\n", + " </tr>\n", + " <tr>\n", + " <th>C</th>\n", + " <td>0.000039</td>\n", + " <td>0.000291</td>\n", + " <td>0.000079</td>\n", + " <td>0.000063</td>\n", + " </tr>\n", + " <tr>\n", + " <th>DIS</th>\n", + " <td>0.000015</td>\n", + " <td>0.000079</td>\n", + " <td>0.000202</td>\n", + " <td>0.000023</td>\n", + " </tr>\n", + " <tr>\n", + " <th>META</th>\n", + " <td>0.000080</td>\n", + " <td>0.000063</td>\n", + " <td>0.000023</td>\n", + " <td>0.000363</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 31 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-15T22:25:07.744917Z", + "start_time": "2025-02-15T22:25:07.741519Z" + } + }, + "cell_type": "code", + "source": [ + "# Calculate mean returns for each stock\n", + "avg_rets = returns.mean()\n", + "\n", + "# Calculate mean returns for portfolio overall,\n", + "# using dot product to\n", + "# normalize individual means against investment weights\n", + "# https://en.wikipedia.org/wiki/Dot_product#:~:targetText=In%20mathematics%2C%20the%20dot%20product,and%20returns%20a%20single%20number.\n", + "port_mean = avg_rets.dot(weights)\n", + "\n", + "# Calculate portfolio standard deviation\n", + "port_stdev = np.sqrt(weights.T.dot(cov_matrix).dot(weights))\n", + "\n", + "# Calculate mean of investment\n", + "mean_investment = (1+port_mean) * initial_investment\n", + "\n", + "# Calculate standard deviation of investmnet\n", + "stdev_investment = initial_investment * port_stdev" + ], + "id": "a157b600c98f83fd", + "outputs": [], + "execution_count": 32 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-15T22:28:35.064271Z", + "start_time": "2025-02-15T22:28:35.046813Z" + } + }, + "cell_type": "code", + "source": [ + "# Select our confidence interval (I'll choose 95% here)\n", + "conf_level1 = 0.05\n", + "\n", + "# Using SciPy ppf method to generate values for the\n", + "# inverse cumulative distribution function to a normal distribution\n", + "# Plugging in the mean, standard deviation of our portfolio\n", + "# as calculated above\n", + "# https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html\n", + "from scipy.stats import norm\n", + "cutoff1 = norm.ppf(conf_level1, mean_investment, stdev_investment)\n", + "cutoff1" + ], + "id": "7cf30fad1b4a37f7", + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(983640.6453882146)" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 36 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-15T22:28:39.289345Z", + "start_time": "2025-02-15T22:28:39.287143Z" + } + }, + "cell_type": "code", + "source": [ + "#Finally, we can calculate the VaR at our confidence interval\n", + "var_1d1 = initial_investment - cutoff1\n", + "var_1d1" + ], + "id": "5c5c2a6f22e44002", + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(16359.354611785384)" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 37 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-15T22:25:09.199604Z", + "start_time": "2025-02-15T22:25:09.093065Z" + } + }, + "cell_type": "code", + "source": [ + "# Calculate n Day VaR\n", + "var_array = []\n", + "num_days = int(15)\n", + "for x in range(1, num_days+1):\n", + " var_array.append(np.round(var_1d1 * np.sqrt(x),2))\n", + " print(str(x) + \" day VaR @ 95% confidence: \" + str(np.round(var_1d1 * np.sqrt(x),2)))\n", + "\n", + "# Build plot\n", + "plt.xlabel(\"Day #\")\n", + "plt.ylabel(\"Max portfolio loss (USD)\")\n", + "plt.title(\"Max portfolio loss (VaR) over 15-day period\")\n", + "plt.plot(var_array, \"r\")" + ], + "id": "641bda40d9fa37f", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 day VaR @ 95% confidence: 16359.35\n", + "2 day VaR @ 95% confidence: 23135.62\n", + "3 day VaR @ 95% confidence: 28335.23\n", + "4 day VaR @ 95% confidence: 32718.71\n", + "5 day VaR @ 95% confidence: 36580.63\n", + "6 day VaR @ 95% confidence: 40072.07\n", + "7 day VaR @ 95% confidence: 43282.78\n", + "8 day VaR @ 95% confidence: 46271.24\n", + "9 day VaR @ 95% confidence: 49078.06\n", + "10 day VaR @ 95% confidence: 51732.82\n", + "11 day VaR @ 95% confidence: 54257.84\n", + "12 day VaR @ 95% confidence: 56670.47\n", + "13 day VaR @ 95% confidence: 58984.49\n", + "14 day VaR @ 95% confidence: 61211.1\n", + "15 day VaR @ 95% confidence: 63359.51\n" + ] + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x15cf1e630>]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYblJREFUeJzt3Qd4U9UbBvAXSil7L9kgS/aSrYggQxwIKrJEkSkb/kwR3AUUZYoDFZwMlb1ElorsJUsEQZZsKCCjQLn/5z3XG9NSIIW2N23e3/OE9t7cJichuflyzne+k8SyLAsiIiIiclNJb361iIiIiJCCJhEREREfKGgSERER8YGCJhEREREfKGgSERER8YGCJhEREREfKGgSERER8YGCJhEREREfKGgSERER8YGCJhE/8fbbb6NgwYIICgpC2bJlY/S3DzzwgLk4/vrrLyRJkgQTJ06MlbbF9u3Ftocffhjt2rWDv/jggw+QN29ehIeHu92URIevQb4W+ZpMzPLnz4/nnnsu1m5v2bJl5nnjT7l9CpokXk5wvPzyyy/XXc9VfPLkyWOuf+SRR5CYbd++Ha+88kq0J/sffvgBffv2RfXq1fHZZ5/hrbfecqWNCdGKFSvM89evXz+z3a1bN/N62r179w3/5qWXXjLH/Pbbbz7fj/M6di7p0qVDzZo1MXfu3OuO5Yfd5cuX8eGHHyKxefPNN/HYY48he/bs5nngazo63B/1OeMlRYoU8d5mkdiSLNZuSeQmeKL8+uuvUaNGjUj7ly9fjoMHDyIkJASJHYOmV1991fQI8VuktyVLliBp0qT45JNPkDx58ju+r3z58uHixYsIDg5GIPTQ1a5dG4UKFTLbLVq0wJgxY8zrbfDgwdH+zTfffINSpUqhdOnSMbqvhx56CM8++6wJ9vft24fx48fj0Ucfxfz581GvXr1Ir/fWrVvj3XffRdeuXU2wkFgMGjQIOXLkQLly5bBw4cJbHs/nKE2aNJ5t9qTKre3cudOcE8S/KGiSeBs+mTZtGkaPHo1kyf572fGDrUKFCjhx4gQSq0uXLt0yEDp27BhSpkwZKwETBco3ej5v7OnhcJijcuXKJoBiYBRd0LRy5Urs3bsXQ4cOjfH9FSlSBC1btvRsN2nSBMWLF8eoUaMiBU309NNPY/jw4Vi6dCkefPBBJBTnz59H6tSpb3g9nzsG/XzPZs2a9Za39+STTyJLliyx3MrEicE4zxc8FwTCF8mESGGsxItmzZrh5MmTWLRokWcfhy++/fZbNG/ePNq/eeedd1CtWjVkzpzZnEQYXPF4bxzKYoDw6aefRtrP4S3unzdv3k3bxZM/hwU5vMM8IgYa/BD8/vvvrzt2z549eOqpp5ApUyakSpUKVapUuW5oxskbmDx5svlGnitXLnMsg0X+LdWqVcszVOEcz8fBDytnv5M7dPXqVbz++uu4++67zUmU7R04cOAtc2VulIPEHq377rvPfChmyJABjz/+OHbs2IHb5cvtnTt3Dj169DBt52PIli2b6bHZsGGD55hdu3aZAIQ9GPw/yJ07N5555hmcOXPmpvfP55/PUZ06dSLtZ2/T77//Huk+vAN1Pjd8TfI1yMCKr6306dObx8HHw0DHF/fcc48JCP7888/rruNt8rUyc+ZMn26LXyr4N3yt8zYZnB06dCjS+4HtZg9XVAMGDDAB9+nTpz37Vq9ejfr165vHxdcghxI5lBndEBp7Qfk+zJgx43W9wVFF7SX1JRA4e/as+RlT27ZtMwEnnxO+Jt544w1cu3btuuP4HDds2BA5c+Y0rzG+X/i+iYiI8BwzZMgQ0/N6/Pjx6/6+ffv25vXLgOVGOOTKHjOeBxgg87XC+3vttdeue2xs48iRI1GiRAnzeuZQZocOHSL9/3iff9hjV7FiRfM4nSHd6HKafDkHEXvvGzVqZNrI91vPnj2VXxdbLJE49Nlnn/FsYq1du9aqVq2a1apVK891M2bMsJImTWodOnTIypcvn9WwYcNIf5s7d27rxRdftMaOHWu9++67VqVKlcxtzZkzJ9JxjzzyiJU+fXpr//79Zvu3336zkidPbr3wwgu3bB/vt0iRIlaGDBms/v37m/spVaqUadcPP/zgOe7IkSNW9uzZrbRp01ovvfSSOa5MmTLmuO+//95z3NKlS00bixcvbpUtW9YcFxoaam3bts3q1q2buW7gwIHWF198YS68Xf687777rJCQEM/+P//809xe69atzd88+eST1rhx46xnn33WbDdq1CjS46hZs6a5OPbu3WuO4/PvWLRokZUsWTLzeIcPH269+uqrVpYsWayMGTOa42/mTm6vefPm5v+jV69e1oQJE6xhw4ZZjz76qPXll1+a68PDw60CBQpYOXPmtN544w1zDG/r3nvvtf7666+btqtt27ZW5syZr9v/xx9/mPb27t070v6rV69a2bJls+6//36zffz4ceuuu+4ybRs/frx5HEWLFrWCg4OtjRs3Rvpb3l7nzp0j7QsLC7OCgoKsypUrR9u+OnXqWBUqVLB8fZ/wMb/33nvmtZgyZUorf/781unTp80x+/bts5IkSWLaGFXBggUjvX8WL15snvOqVataI0aMMLdZunRps2/16tWe44YMGeJ5vT7++OPW+++/b15nvuBzx7/lbUTHue00adKYn6lTp7ZatGhhXvO+OHz4sJU1a1bzenrllVest99+2ypcuLB5HLw979cY3w9PP/20OYb/j0899ZQ55n//+5/nmF27dpl9Y8aMiXQ/fP3xPtq0aXPT9vC9mCJFCtMGnsd4XuK5h7f58ssvX/e65HujXbt21gcffGD169fPPH7+/16+fDnS+adQoULm/vl/zmN5DnGu433G9Bx04cIF855kW/v27WuNHDnSvAad5825fbk9Cpok3oImnmT4huebmnhiq1Wrlvk9uqDJOc7Bk03JkiWtBx988LqTa6ZMmayHHnrInADLlStn5c2b1zpz5swt28f7Zfu+++47zz7+HT9IeTuOHj16mON+/vlnz75z586ZD3t+sEVEREQKmvghFrX906ZNu+FJiydHnlS9bdq0yRzPE7A3fhBw/5IlS2IUNDGIY8Bw8uRJz77Nmzebky6DsZu5k9tjQBs12PDG4IS3zecnpmrUqHHDoIQfUAy8nf8bWrBggbmvDz/80BNE8TXjjUEKP5yifojy7xiIM1g4duyYtW7dOqt+/fpmPz+so9O+fXsT/NwMX9d8Hvnavnjxomc/vxzwtgcPHuzZxyAo6uNds2aNOe7zzz8329euXTMf7PXq1TO/O/h65OuV75OogU2zZs2smLpV0MQP6y5dulhfffWV9e2331rdu3c3gQTb5st703nPeQd5fN75eooaNEV9r1GHDh2sVKlSWZcuXYr0/EUNcBlw+BJMOF9gunbt6tnH55fnLQajfD6I5wgex8ftzXntee93zj+8LqqoQZOv5yA+7zxu6tSpnuPOnz9vgjMFTXdOQZPEW9DEEx5Pmnwznz171nyYfPzxxzcMmrydOnXKnJQ6depkeoWi+uabb8z9sDeK38Z//PFHn9rH+2UPh/eHC/GbIW+PARnxmxtvOyr2IvG4LVu2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ixcvWi+++KKVMWNGE/g88cQTJrDy9tdff1kNGjSwUqZMaWXJksXq3bu3deXKlUjHLF261CpbtqyVPHlyq2DBgpHuwzFmzBgToPEYliBYtWqVz4/Fr4KmEycsK3t2O2jq39/t1oiIiPitmHx+J+E/t9NDJZFxJh5n0TEpnEODrmrZEvjqK3tYbsMGJX+LiIjEwue338yek1gyc6YdMCVNqtlyIiIisUhBU2Jy6hTQsaP9e58+QKVKbrdIREQk0VDQlJh0785KniybDrzyitutERERSVQUNCUWs2YBX35pD8tNnAikSOF2i0RERBIVBU2JZViuQwf79//9D6hc2e0WiYiIJDoKmhKDnj3/G5Z79VW3WyMiIpIoKWhK6GbPBj7//L/ZchqWExERiRMKmhKy06f/G5br1QuoUsXtFomIiCRaCpoS+rDc4cNA0aLAa6+53RoREZFETUFTQjV3LjBpEpAkiT0slzKl2y0SERFJ1BQ0JURhYUD79v8Ny1Wt6naLREREEj0FTQl1WO7vv4EiRYDXX3e7NSIiIgFBQVNCM2+eXbySw3KffqphORERkXiioCmhDsuxt6l6dbdbJCIiEjAUNCUkvXsDhw4BhQtrWE5ERCSeKWhKKBYssIfjnGG5VKncbpGIiEhAUdCUEJw5A7RrZ//evTtQo4bbLRIREQk4CpoSyrDcwYNAoULAm2+63RoREZGApKDJ3y1cCHzyiYblREREXJbM7QbILZw9C6RPDzz3HHDffW63RkREJGApaPJ3Tz1lV/zOmNHtloiIiAQ0BU0JQe7cbrdAREQk4CmnSURERMQHCppEREREfKCgSURERMQHCppEREREfKCgSURERMQHCppEREREfKCgSURERMQHCppEREREfKCgSURERMQHCppEREREfKCgSURERMQHCppEREREfKCgSURERMQHyXw5SG7Nsizz8+zZs243RURERHzkfG47n+M3o6Aplpw7d878zJMnj9tNERERkdv4HE+fPv1Nj0li+RJayS1du3YNf//9N9KmTYskSZLEehTMYOzAgQNIly4dAk2gP34K9OdAjz+wHz8F+nMQ6I8/Lp8DhkEMmHLmzImkSW+etaSepljCJzp37txxeh98kQTqm4UC/fFToD8HevyB/fgp0J+DQH/8cfUc3KqHyaFEcBEREREfKGgSERER8YGCpgQgJCQE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fPFFs2gosXcoXbp0+PbbbyPd9owZM8zx586du2U7fv31V1SvXt38/ssvv3h+F5GER2vPiUiiHJ4LCwszwU1UZcuWRc6cOTFv3jyzPXLkSNMTVKBAAezZs8cETQ8++CDef/99c3379u1x6NAhzJ0713Mbjz/+ODJkyIBJkyZFe/8cfitdurT5/cKFCwgKCjJB3MWLF82QYYoUKdC8eXPPfYhIwqCgSUQCKmh65pln8Ntvv2H79u3R/i17lTp27IgTJ06Y7TVr1qBatWo4cOAA7rrrLhw7dsz0Xv3444+oWbNmtLfB4b+DBw/i7NmzqFixItatW2d6phiwMfji8FyaNGmQJUuWWH7kIhKXNDwnIgGF3xPZ2+Ng8FO7dm0TCKVNmxatWrXCyZMnTQ8RVapUCSVKlPD0Kn355ZfIly8f7r///hveR7JkyZA/f378/vvvuPfee02v05EjR0xCOv+O1ylgEkl4FDSJSEDZsWOHGYojJokzMZxBzXfffYf169dj3Lhx5rrLly97/qZt27aePKjPPvsMzz//fKTAKyoGWexJYgDGnir+zsCM98ffeb2IJDwKmkQkYCxZsgRbtmxBkyZNzDaDJJYgGDFiBKpUqYIiRYrg77//vu7vWrZsiX379mH06NFmWK9169Y3vR/mS23atMkkorNnir+XLFnS5E/xdyefSkQSlmRuN0BEJC6Eh4ebIbGIiAgcPXoUCxYsQGhoqOlZevbZZ80xhQoVMrWTxowZg0cffRQrVqzABx98cN1tZcyYEY0bN0afPn1Qt25d5M6d+6b3zeE73jfvl0nj7JXatm2bCdaYFyUiCZN6mkQkUWKQxACF+UOs2bR06VLTU8SyA5zNRpw1x5IDw4YNMz1BX331lQmsovPCCy+YIbs2bdr4dP/Lli0z+UycKcchOgZaCphEEjbNnhMR8cEXX3yBnj17muE7VvgWkcCj4TkRkZvgLDpWFh86dCg6dOiggEkkgGl4TkTkJoYPH45ixYqZpO4BAwa43RwRcZGG50RERER8oJ4mERERER8oaBIRERHxgYImERERER8oaBIRERHxgYImERERER8oaBIRERHxgYImERERER8oaBIRERHxgYImEREREdza/wEdBl6ijRqwEAAAAABJRU5ErkJggg==" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 35 + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "", + "id": "16442df6e6372aa5" + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/poetry.lock b/notebooks/poetry.lock index 1a6a705..fd8d0bb 100644 --- a/notebooks/poetry.lock +++ b/notebooks/poetry.lock @@ -4407,6 +4407,64 @@ files = [ {file = "ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2"}, ] +[[package]] +name = "scipy" +version = "1.15.1" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "scipy-1.15.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:c64ded12dcab08afff9e805a67ff4480f5e69993310e093434b10e85dc9d43e1"}, + {file = "scipy-1.15.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5b190b935e7db569960b48840e5bef71dc513314cc4e79a1b7d14664f57fd4ff"}, + {file = "scipy-1.15.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:4b17d4220df99bacb63065c76b0d1126d82bbf00167d1730019d2a30d6ae01ea"}, + {file = "scipy-1.15.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:63b9b6cd0333d0eb1a49de6f834e8aeaefe438df8f6372352084535ad095219e"}, + {file = "scipy-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f151e9fb60fbf8e52426132f473221a49362091ce7a5e72f8aa41f8e0da4f25"}, + {file = "scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e10b1dd56ce92fba3e786007322542361984f8463c6d37f6f25935a5a6ef52"}, + {file = "scipy-1.15.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5dff14e75cdbcf07cdaa1c7707db6017d130f0af9ac41f6ce443a93318d6c6e0"}, + {file = "scipy-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:f82fcf4e5b377f819542fbc8541f7b5fbcf1c0017d0df0bc22c781bf60abc4d8"}, + {file = "scipy-1.15.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5bd8d27d44e2c13d0c1124e6a556454f52cd3f704742985f6b09e75e163d20d2"}, + {file = "scipy-1.15.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:be3deeb32844c27599347faa077b359584ba96664c5c79d71a354b80a0ad0ce0"}, + {file = "scipy-1.15.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5eb0ca35d4b08e95da99a9f9c400dc9f6c21c424298a0ba876fdc69c7afacedf"}, + {file = "scipy-1.15.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:74bb864ff7640dea310a1377d8567dc2cb7599c26a79ca852fc184cc851954ac"}, + {file = "scipy-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:667f950bf8b7c3a23b4199db24cb9bf7512e27e86d0e3813f015b74ec2c6e3df"}, + {file = "scipy-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395be70220d1189756068b3173853029a013d8c8dd5fd3d1361d505b2aa58fa7"}, + {file = "scipy-1.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce3a000cd28b4430426db2ca44d96636f701ed12e2b3ca1f2b1dd7abdd84b39a"}, + {file = "scipy-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fe1d95944f9cf6ba77aa28b82dd6bb2a5b52f2026beb39ecf05304b8392864b"}, + {file = "scipy-1.15.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c09aa9d90f3500ea4c9b393ee96f96b0ccb27f2f350d09a47f533293c78ea776"}, + {file = "scipy-1.15.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0ac102ce99934b162914b1e4a6b94ca7da0f4058b6d6fd65b0cef330c0f3346f"}, + {file = "scipy-1.15.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:09c52320c42d7f5c7748b69e9f0389266fd4f82cf34c38485c14ee976cb8cb04"}, + {file = "scipy-1.15.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:cdde8414154054763b42b74fe8ce89d7f3d17a7ac5dd77204f0e142cdc9239e9"}, + {file = "scipy-1.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c9d8fc81d6a3b6844235e6fd175ee1d4c060163905a2becce8e74cb0d7554ce"}, + {file = "scipy-1.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb57b30f0017d4afa5fe5f5b150b8f807618819287c21cbe51130de7ccdaed2"}, + {file = "scipy-1.15.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491d57fe89927fa1aafbe260f4cfa5ffa20ab9f1435025045a5315006a91b8f5"}, + {file = "scipy-1.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:900f3fa3db87257510f011c292a5779eb627043dd89731b9c461cd16ef76ab3d"}, + {file = "scipy-1.15.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:100193bb72fbff37dbd0bf14322314fc7cbe08b7ff3137f11a34d06dc0ee6b85"}, + {file = "scipy-1.15.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:2114a08daec64980e4b4cbdf5bee90935af66d750146b1d2feb0d3ac30613692"}, + {file = "scipy-1.15.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6b3e71893c6687fc5e29208d518900c24ea372a862854c9888368c0b267387ab"}, + {file = "scipy-1.15.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:837299eec3d19b7e042923448d17d95a86e43941104d33f00da7e31a0f715d3c"}, + {file = "scipy-1.15.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82add84e8a9fb12af5c2c1a3a3f1cb51849d27a580cb9e6bd66226195142be6e"}, + {file = "scipy-1.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070d10654f0cb6abd295bc96c12656f948e623ec5f9a4eab0ddb1466c000716e"}, + {file = "scipy-1.15.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55cc79ce4085c702ac31e49b1e69b27ef41111f22beafb9b49fea67142b696c4"}, + {file = "scipy-1.15.1-cp313-cp313-win_amd64.whl", hash = "sha256:c352c1b6d7cac452534517e022f8f7b8d139cd9f27e6fbd9f3cbd0bfd39f5bef"}, + {file = "scipy-1.15.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0458839c9f873062db69a03de9a9765ae2e694352c76a16be44f93ea45c28d2b"}, + {file = "scipy-1.15.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:af0b61c1de46d0565b4b39c6417373304c1d4f5220004058bdad3061c9fa8a95"}, + {file = "scipy-1.15.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:71ba9a76c2390eca6e359be81a3e879614af3a71dfdabb96d1d7ab33da6f2364"}, + {file = "scipy-1.15.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14eaa373c89eaf553be73c3affb11ec6c37493b7eaaf31cf9ac5dffae700c2e0"}, + {file = "scipy-1.15.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f735bc41bd1c792c96bc426dece66c8723283695f02df61dcc4d0a707a42fc54"}, + {file = "scipy-1.15.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2722a021a7929d21168830790202a75dbb20b468a8133c74a2c0230c72626b6c"}, + {file = "scipy-1.15.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc7136626261ac1ed988dca56cfc4ab5180f75e0ee52e58f1e6aa74b5f3eacd5"}, + {file = "scipy-1.15.1.tar.gz", hash = "sha256:033a75ddad1463970c96a88063a1df87ccfddd526437136b6ee81ff0312ebdf6"}, +] + +[package.dependencies] +numpy = ">=1.23.5,<2.5" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + [[package]] name = "seaborn" version = "0.13.2" @@ -5099,4 +5157,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.12,<3.13" -content-hash = "141638bd974084b279bca0180eabb9e302c8a86950888cff5c86f6e836d2ad8f" +content-hash = "8f3d8471de06448097c2678bf99ee2aad406c3d2989908e4ed975ae6cd3c6b35" diff --git a/notebooks/pyproject.toml b/notebooks/pyproject.toml index cf09062..2911d49 100644 --- a/notebooks/pyproject.toml +++ b/notebooks/pyproject.toml @@ -11,7 +11,8 @@ dependencies = [ "yfinance (>=0.2.52,<0.3.0)", "pandas (>=2.2.3,<3.0.0)", "numpy (>=2.2.3,<3.0.0)", - "maturin (>=1.8.2,<2.0.0)" + "maturin (>=1.8.2,<2.0.0)", + "scipy (>=1.15.1,<2.0.0)" ] [tool.poetry] diff --git a/notebooks/varcovar_var.ipynb b/notebooks/varcovar_var.ipynb index 616cd37..b86b920 100644 --- a/notebooks/varcovar_var.ipynb +++ b/notebooks/varcovar_var.ipynb @@ -31,281 +31,6 @@ "outputs": [], "execution_count": 2 }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2025-02-14T22:51:48.967198Z", - "start_time": "2025-02-14T22:51:48.949948Z" - } - }, - "cell_type": "code", - "source": "aapl.results", - "id": "ba361e8697a2e425", - "outputs": [ - { - "data": { - "text/plain": [ - "[YFinanceEquityHistoricalData(date=2024-02-14, open=185.32000732421875, high=185.52999877929688, low=182.44000244140625, close=184.14999389648438, volume=54630500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-15, open=183.5500030517578, high=184.49000549316406, low=181.35000610351562, close=183.86000061035156, volume=65434500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-16, open=183.4199981689453, high=184.85000610351562, low=181.6699981689453, close=182.30999755859375, volume=49701400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-20, open=181.7899932861328, high=182.42999267578125, low=180.0, close=181.55999755859375, volume=53665600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-21, open=181.94000244140625, high=182.88999938964844, low=180.66000366210938, close=182.32000732421875, volume=41529700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-22, open=183.47999572753906, high=184.9600067138672, low=182.4600067138672, close=184.3699951171875, volume=52292200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-23, open=185.00999450683594, high=185.0399932861328, low=182.22999572753906, close=182.52000427246094, volume=45119700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-26, open=182.24000549316406, high=182.75999450683594, low=180.64999389648438, close=181.16000366210938, volume=40867400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-27, open=181.10000610351562, high=183.9199981689453, low=179.55999755859375, close=182.6300048828125, volume=54318900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-28, open=182.50999450683594, high=183.1199951171875, low=180.1300048828125, close=181.4199981689453, volume=48953900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-29, open=181.27000427246094, high=182.57000732421875, low=179.52999877929688, close=180.75, volume=136682600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-01, open=179.5500030517578, high=180.52999877929688, low=177.3800048828125, close=179.66000366210938, volume=73488000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-04, open=176.14999389648438, high=176.89999389648438, low=173.7899932861328, close=175.10000610351562, volume=81510100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-05, open=170.75999450683594, high=172.0399932861328, low=169.6199951171875, close=170.1199951171875, volume=95132400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-06, open=171.05999755859375, high=171.24000549316406, low=168.67999267578125, close=169.1199951171875, volume=68587700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-07, open=169.14999389648438, high=170.72999572753906, low=168.49000549316406, close=169.0, volume=71765100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-08, open=169.0, high=173.6999969482422, low=168.94000244140625, close=170.72999572753906, volume=76114600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-11, open=172.94000244140625, high=174.3800048828125, low=172.0500030517578, close=172.75, volume=60139500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-12, open=173.14999389648438, high=174.02999877929688, low=171.00999450683594, close=173.22999572753906, volume=59825400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-13, open=172.77000427246094, high=173.19000244140625, low=170.75999450683594, close=171.1300048828125, volume=52488700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-14, open=172.91000366210938, high=174.30999755859375, low=172.0500030517578, close=173.0, volume=72913500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-15, open=171.1699981689453, high=172.6199951171875, low=170.2899932861328, close=172.6199951171875, volume=121664700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-18, open=175.57000732421875, high=177.7100067138672, low=173.52000427246094, close=173.72000122070312, volume=75604200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-19, open=174.33999633789062, high=176.61000061035156, low=173.02999877929688, close=176.0800018310547, volume=55215200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-20, open=175.72000122070312, high=178.6699981689453, low=175.08999633789062, close=178.6699981689453, volume=53423100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-21, open=177.0500030517578, high=177.49000549316406, low=170.83999633789062, close=171.3699951171875, volume=106181300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-22, open=171.75999450683594, high=173.0500030517578, low=170.05999755859375, close=172.27999877929688, volume=71106600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-25, open=170.57000732421875, high=171.94000244140625, low=169.4499969482422, close=170.85000610351562, volume=54288300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-26, open=170.0, high=171.4199981689453, low=169.5800018310547, close=169.7100067138672, volume=57388400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-27, open=170.41000366210938, high=173.60000610351562, low=170.11000061035156, close=173.30999755859375, volume=60273300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-28, open=171.75, high=172.22999572753906, low=170.50999450683594, close=171.47999572753906, volume=65672700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-01, open=171.19000244140625, high=171.25, low=169.47999572753906, close=170.02999877929688, volume=46240500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-02, open=169.0800018310547, high=169.33999633789062, low=168.22999572753906, close=168.83999633789062, volume=49329500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-03, open=168.7899932861328, high=170.67999267578125, low=168.5800018310547, close=169.64999389648438, volume=47691700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-04, open=170.2899932861328, high=171.9199981689453, low=168.82000732421875, close=168.82000732421875, volume=53704400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-05, open=169.58999633789062, high=170.38999938964844, low=168.9499969482422, close=169.5800018310547, volume=42055200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-08, open=169.02999877929688, high=169.1999969482422, low=168.24000549316406, close=168.4499969482422, volume=37425500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-09, open=168.6999969482422, high=170.0800018310547, low=168.35000610351562, close=169.6699981689453, volume=42451200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-10, open=168.8000030517578, high=169.08999633789062, low=167.11000061035156, close=167.77999877929688, volume=49709300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-11, open=168.33999633789062, high=175.4600067138672, low=168.16000366210938, close=175.0399932861328, volume=91070300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-12, open=174.25999450683594, high=178.36000061035156, low=174.2100067138672, close=176.5500030517578, volume=101593300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-15, open=175.36000061035156, high=176.6300048828125, low=172.5, close=172.69000244140625, volume=73531800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-16, open=171.75, high=173.75999450683594, low=168.27000427246094, close=169.3800048828125, volume=73711200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-17, open=169.61000061035156, high=170.64999389648438, low=168.0, close=168.0, volume=50901200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-18, open=168.02999877929688, high=168.63999938964844, low=166.5500030517578, close=167.0399932861328, volume=43122900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-19, open=166.2100067138672, high=166.39999389648438, low=164.0800018310547, close=165.0, volume=67772100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-22, open=165.52000427246094, high=167.25999450683594, low=164.77000427246094, close=165.83999633789062, volume=48116400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-23, open=165.35000610351562, high=167.0500030517578, low=164.9199981689453, close=166.89999389648438, volume=49537800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-24, open=166.5399932861328, high=169.3000030517578, low=166.2100067138672, close=169.02000427246094, volume=48251800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-25, open=169.52999877929688, high=170.61000061035156, low=168.14999389648438, close=169.88999938964844, volume=50558300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-26, open=169.8800048828125, high=171.33999633789062, low=169.17999267578125, close=169.3000030517578, volume=44838400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-29, open=173.3699951171875, high=176.02999877929688, low=173.10000610351562, close=173.5, volume=68169400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-30, open=173.3300018310547, high=174.99000549316406, low=170.0, close=170.3300018310547, volume=65934800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-01, open=169.5800018310547, high=172.7100067138672, low=169.11000061035156, close=169.3000030517578, volume=50383100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-02, open=172.50999450683594, high=173.4199981689453, low=170.88999938964844, close=173.02999877929688, volume=94214900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-03, open=186.64999389648438, high=187.0, low=182.66000366210938, close=183.3800048828125, volume=163224100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-06, open=182.35000610351562, high=184.1999969482422, low=180.4199981689453, close=181.7100067138672, volume=78569700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-07, open=183.4499969482422, high=184.89999389648438, low=181.32000732421875, close=182.39999389648438, volume=77305800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-08, open=182.85000610351562, high=183.07000732421875, low=181.4499969482422, close=182.74000549316406, volume=45057100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-09, open=182.55999755859375, high=184.66000366210938, low=182.11000061035156, close=184.57000732421875, volume=48983000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-10, open=184.89999389648438, high=185.08999633789062, low=182.1300048828125, close=183.0500030517578, volume=50759500, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-05-13, open=185.44000244140625, high=187.10000610351562, low=184.6199951171875, close=186.27999877929688, volume=72044800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-14, open=187.50999450683594, high=188.3000030517578, low=186.2899932861328, close=187.42999267578125, volume=52393600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-15, open=187.91000366210938, high=190.64999389648438, low=187.3699951171875, close=189.72000122070312, volume=70400000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-16, open=190.47000122070312, high=191.10000610351562, low=189.66000366210938, close=189.83999633789062, volume=52845200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-17, open=189.50999450683594, high=190.80999755859375, low=189.17999267578125, close=189.8699951171875, volume=41282900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-20, open=189.3300018310547, high=191.9199981689453, low=189.00999450683594, close=191.0399932861328, volume=44361300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-21, open=191.08999633789062, high=192.72999572753906, low=190.9199981689453, close=192.35000610351562, volume=42309400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-22, open=192.27000427246094, high=192.82000732421875, low=190.27000427246094, close=190.89999389648438, volume=34648500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-23, open=190.97999572753906, high=191.0, low=186.6300048828125, close=186.8800048828125, volume=51005900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-24, open=188.82000732421875, high=190.5800018310547, low=188.0399932861328, close=189.97999572753906, volume=36294600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-28, open=191.50999450683594, high=193.0, low=189.10000610351562, close=189.99000549316406, volume=52280100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-29, open=189.61000061035156, high=192.25, low=189.50999450683594, close=190.2899932861328, volume=53068000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-30, open=190.75999450683594, high=192.17999267578125, low=190.6300048828125, close=191.2899932861328, volume=49947900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-31, open=191.44000244140625, high=192.57000732421875, low=189.91000366210938, close=192.25, volume=75158300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-03, open=192.89999389648438, high=194.99000549316406, low=192.52000427246094, close=194.02999877929688, volume=50080500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-04, open=194.63999938964844, high=195.32000732421875, low=193.02999877929688, close=194.35000610351562, volume=47471400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-05, open=195.39999389648438, high=196.89999389648438, low=194.8699951171875, close=195.8699951171875, volume=54156800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-06, open=195.69000244140625, high=196.5, low=194.1699981689453, close=194.47999572753906, volume=41181800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-07, open=194.64999389648438, high=196.94000244140625, low=194.13999938964844, close=196.88999938964844, volume=53103900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-10, open=196.89999389648438, high=197.3000030517578, low=192.14999389648438, close=193.1199951171875, volume=97262100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-11, open=193.64999389648438, high=207.16000366210938, low=193.6300048828125, close=207.14999389648438, volume=172373300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-12, open=207.3699951171875, high=220.1999969482422, low=206.89999389648438, close=213.07000732421875, volume=198134300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-13, open=214.74000549316406, high=216.75, low=211.60000610351562, close=214.24000549316406, volume=97862700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-14, open=213.85000610351562, high=215.1699981689453, low=211.3000030517578, close=212.49000549316406, volume=70122700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-17, open=213.3699951171875, high=218.9499969482422, low=212.72000122070312, close=216.6699981689453, volume=93728300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-18, open=217.58999633789062, high=218.6300048828125, low=213.0, close=214.2899932861328, volume=79943300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-20, open=213.92999267578125, high=214.24000549316406, low=208.85000610351562, close=209.67999267578125, volume=86172500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-21, open=210.38999938964844, high=211.88999938964844, low=207.11000061035156, close=207.49000549316406, volume=246421400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-24, open=207.72000122070312, high=212.6999969482422, low=206.58999633789062, close=208.13999938964844, volume=80727000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-25, open=209.14999389648438, high=211.3800048828125, low=208.61000061035156, close=209.07000732421875, volume=56713900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-26, open=211.5, high=214.86000061035156, low=210.63999938964844, close=213.25, volume=66213200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-27, open=214.69000244140625, high=215.74000549316406, low=212.35000610351562, close=214.10000610351562, volume=49772700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-28, open=215.77000427246094, high=216.07000732421875, low=210.3000030517578, close=210.6199951171875, volume=82542700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-01, open=212.08999633789062, high=217.50999450683594, low=211.9199981689453, close=216.75, volume=60402900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-02, open=216.14999389648438, high=220.3800048828125, low=215.10000610351562, close=220.27000427246094, volume=58046200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-03, open=220.0, high=221.5500030517578, low=219.02999877929688, close=221.5500030517578, volume=37369800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-05, open=221.64999389648438, high=226.4499969482422, low=221.64999389648438, close=226.33999633789062, volume=60412400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-08, open=227.08999633789062, high=227.85000610351562, low=223.25, close=227.82000732421875, volume=59085900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-09, open=227.92999267578125, high=229.39999389648438, low=226.3699951171875, close=228.67999267578125, volume=48076100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-10, open=229.3000030517578, high=233.0800018310547, low=229.25, close=232.97999572753906, volume=62627700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-11, open=231.38999938964844, high=232.38999938964844, low=225.77000427246094, close=227.57000732421875, volume=64710600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-12, open=228.9199981689453, high=232.63999938964844, low=228.67999267578125, close=230.5399932861328, volume=53046500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-15, open=236.47999572753906, high=237.22999572753906, low=233.08999633789062, close=234.39999389648438, volume=62631300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-16, open=235.0, high=236.27000427246094, low=232.3300018310547, close=234.82000732421875, volume=43234300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-17, open=229.4499969482422, high=231.4600067138672, low=226.63999938964844, close=228.8800048828125, volume=57345900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-18, open=230.27999877929688, high=230.44000244140625, low=222.27000427246094, close=224.17999267578125, volume=66034600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-19, open=224.82000732421875, high=226.8000030517578, low=223.27999877929688, close=224.30999755859375, volume=49151500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-22, open=227.00999450683594, high=227.77999877929688, low=223.08999633789062, close=223.9600067138672, volume=48201800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-23, open=224.3699951171875, high=226.94000244140625, low=222.67999267578125, close=225.00999450683594, volume=39960300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-24, open=224.0, high=224.8000030517578, low=217.1300048828125, close=218.5399932861328, volume=61777600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-25, open=218.92999267578125, high=220.85000610351562, low=214.6199951171875, close=217.49000549316406, volume=51391200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-26, open=218.6999969482422, high=219.49000549316406, low=216.00999450683594, close=217.9600067138672, volume=41601300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-29, open=216.9600067138672, high=219.3000030517578, low=215.75, close=218.24000549316406, volume=36311800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-30, open=219.19000244140625, high=220.3300018310547, low=216.1199951171875, close=218.8000030517578, volume=41643800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-31, open=221.44000244140625, high=223.82000732421875, low=220.6300048828125, close=222.0800018310547, volume=50036300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-01, open=224.3699951171875, high=224.47999572753906, low=217.02000427246094, close=218.36000061035156, volume=62501000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-02, open=219.14999389648438, high=225.60000610351562, low=217.7100067138672, close=219.86000061035156, volume=105568600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-05, open=199.08999633789062, high=213.5, low=196.0, close=209.27000427246094, volume=119548600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-06, open=205.3000030517578, high=209.99000549316406, low=201.07000732421875, close=207.22999572753906, volume=69660500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-07, open=206.89999389648438, high=213.63999938964844, low=206.38999938964844, close=209.82000732421875, volume=63516400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-08, open=213.11000061035156, high=214.1999969482422, low=208.8300018310547, close=213.30999755859375, volume=47161100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-09, open=212.10000610351562, high=216.77999877929688, low=211.97000122070312, close=216.24000549316406, volume=42201600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-12, open=216.07000732421875, high=219.50999450683594, low=215.60000610351562, close=217.52999877929688, volume=38028100, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-08-13, open=219.00999450683594, high=221.88999938964844, low=219.00999450683594, close=221.27000427246094, volume=44155300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-14, open=220.57000732421875, high=223.02999877929688, low=219.6999969482422, close=221.72000122070312, volume=41960600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-15, open=224.60000610351562, high=225.35000610351562, low=222.75999450683594, close=224.72000122070312, volume=46414000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-16, open=223.9199981689453, high=226.8300018310547, low=223.64999389648438, close=226.0500030517578, volume=44340200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-19, open=225.72000122070312, high=225.99000549316406, low=223.0399932861328, close=225.88999938964844, volume=40687800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-20, open=225.77000427246094, high=227.1699981689453, low=225.4499969482422, close=226.50999450683594, volume=30299000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-21, open=226.52000427246094, high=227.97999572753906, low=225.0500030517578, close=226.39999389648438, volume=34765500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-22, open=227.7899932861328, high=228.33999633789062, low=223.89999389648438, close=224.52999877929688, volume=43695300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-23, open=225.66000366210938, high=228.22000122070312, low=224.3300018310547, close=226.83999633789062, volume=38677300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-26, open=226.75999450683594, high=227.27999877929688, low=223.88999938964844, close=227.17999267578125, volume=30602200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-27, open=226.0, high=228.85000610351562, low=224.88999938964844, close=228.02999877929688, volume=35934600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-28, open=227.9199981689453, high=229.86000061035156, low=225.67999267578125, close=226.49000549316406, volume=38052200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-29, open=230.10000610351562, high=232.9199981689453, low=228.8800048828125, close=229.7899932861328, volume=51906300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-30, open=230.19000244140625, high=230.39999389648438, low=227.47999572753906, close=229.0, volume=52990800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-03, open=228.5500030517578, high=229.0, low=221.1699981689453, close=222.77000427246094, volume=50190600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-04, open=221.66000366210938, high=221.77999877929688, low=217.47999572753906, close=220.85000610351562, volume=43840200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-05, open=221.6300048828125, high=225.47999572753906, low=221.52000427246094, close=222.3800048828125, volume=36615400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-06, open=223.9499969482422, high=225.24000549316406, low=219.77000427246094, close=220.82000732421875, volume=48423000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-09, open=220.82000732421875, high=221.27000427246094, low=216.7100067138672, close=220.91000366210938, volume=67180000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-10, open=218.9199981689453, high=221.47999572753906, low=216.72999572753906, close=220.11000061035156, volume=51591000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-11, open=221.4600067138672, high=223.08999633789062, low=217.88999938964844, close=222.66000366210938, volume=44587100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-12, open=222.5, high=223.5500030517578, low=219.82000732421875, close=222.77000427246094, volume=37498200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-13, open=223.5800018310547, high=224.0399932861328, low=221.91000366210938, close=222.5, volume=36766600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-16, open=216.5399932861328, high=217.22000122070312, low=213.9199981689453, close=216.32000732421875, volume=59357400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-17, open=215.75, high=216.89999389648438, low=214.5, close=216.7899932861328, volume=45519300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-18, open=217.5500030517578, high=222.7100067138672, low=217.5399932861328, close=220.69000244140625, volume=59894900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-19, open=224.99000549316406, high=229.82000732421875, low=224.6300048828125, close=228.8699951171875, volume=66781300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-20, open=229.97000122070312, high=233.08999633789062, low=227.6199951171875, close=228.1999969482422, volume=318679900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-23, open=227.33999633789062, high=229.4499969482422, low=225.80999755859375, close=226.47000122070312, volume=54146000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-24, open=228.64999389648438, high=229.35000610351562, low=225.72999572753906, close=227.3699951171875, volume=43556100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-25, open=224.92999267578125, high=227.2899932861328, low=224.02000427246094, close=226.3699951171875, volume=42308700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-26, open=227.3000030517578, high=228.5, low=225.41000366210938, close=227.52000427246094, volume=36636700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-27, open=228.4600067138672, high=229.52000427246094, low=227.3000030517578, close=227.7899932861328, volume=34026000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-30, open=230.0399932861328, high=233.0, low=229.64999389648438, close=233.0, volume=54541900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-01, open=229.52000427246094, high=229.64999389648438, low=223.74000549316406, close=226.2100067138672, volume=63285000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-02, open=225.88999938964844, high=227.3699951171875, low=223.02000427246094, close=226.77999877929688, volume=32880600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-03, open=225.13999938964844, high=226.80999755859375, low=223.32000732421875, close=225.6699981689453, volume=34044200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-04, open=227.89999389648438, high=228.0, low=224.1300048828125, close=226.8000030517578, volume=37245100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-07, open=224.5, high=225.69000244140625, low=221.3300018310547, close=221.69000244140625, volume=39505400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-08, open=224.3000030517578, high=225.97999572753906, low=223.25, close=225.77000427246094, volume=31855700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-09, open=225.22999572753906, high=229.75, low=224.8300018310547, close=229.5399932861328, volume=33591100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-10, open=227.77999877929688, high=229.5, low=227.1699981689453, close=229.0399932861328, volume=28183500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-11, open=229.3000030517578, high=229.41000366210938, low=227.33999633789062, close=227.5500030517578, volume=31759200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-14, open=228.6999969482422, high=231.72999572753906, low=228.60000610351562, close=231.3000030517578, volume=39882100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-15, open=233.61000061035156, high=237.49000549316406, low=232.3699951171875, close=233.85000610351562, volume=64751400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-16, open=231.60000610351562, high=232.1199951171875, low=229.83999633789062, close=231.77999877929688, volume=34082200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-17, open=233.42999267578125, high=233.85000610351562, low=230.52000427246094, close=232.14999389648438, volume=32993800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-18, open=236.17999267578125, high=236.17999267578125, low=234.00999450683594, close=235.0, volume=46431500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-21, open=234.4499969482422, high=236.85000610351562, low=234.4499969482422, close=236.47999572753906, volume=36254500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-22, open=233.88999938964844, high=236.22000122070312, low=232.60000610351562, close=235.86000061035156, volume=38846600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-23, open=234.0800018310547, high=235.13999938964844, low=227.75999450683594, close=230.75999450683594, volume=52287000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-24, open=229.97999572753906, high=230.82000732421875, low=228.41000366210938, close=230.57000732421875, volume=31109500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-25, open=229.74000549316406, high=233.22000122070312, low=229.57000732421875, close=231.41000366210938, volume=38802300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-28, open=233.32000732421875, high=234.72999572753906, low=232.5500030517578, close=233.39999389648438, volume=36087100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-29, open=233.10000610351562, high=234.3300018310547, low=232.32000732421875, close=233.6699981689453, volume=35417200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-30, open=232.61000061035156, high=233.47000122070312, low=229.5500030517578, close=230.10000610351562, volume=47070900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-31, open=229.33999633789062, high=229.8300018310547, low=225.3699951171875, close=225.91000366210938, volume=64370100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-01, open=220.97000122070312, high=225.35000610351562, low=220.27000427246094, close=222.91000366210938, volume=65276700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-04, open=220.99000549316406, high=222.7899932861328, low=219.7100067138672, close=222.00999450683594, volume=44944500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-05, open=221.8000030517578, high=223.9499969482422, low=221.13999938964844, close=223.4499969482422, volume=28111300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-06, open=222.61000061035156, high=226.07000732421875, low=221.19000244140625, close=222.72000122070312, volume=54561100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-07, open=224.6300048828125, high=227.8800048828125, low=224.57000732421875, close=227.47999572753906, volume=42137700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-08, open=227.1699981689453, high=228.66000366210938, low=226.41000366210938, close=226.9600067138672, volume=38328800, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-11-11, open=225.0, high=225.6999969482422, low=221.5, close=224.22999572753906, volume=42005600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-12, open=224.5500030517578, high=225.58999633789062, low=223.36000061035156, close=224.22999572753906, volume=40398300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-13, open=224.00999450683594, high=226.64999389648438, low=222.75999450683594, close=225.1199951171875, volume=48566200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-14, open=225.02000427246094, high=228.8699951171875, low=225.0, close=228.22000122070312, volume=44923900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-15, open=226.39999389648438, high=226.9199981689453, low=224.27000427246094, close=225.0, volume=47923700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-18, open=225.25, high=229.74000549316406, low=225.1699981689453, close=228.02000427246094, volume=44686000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-19, open=226.97999572753906, high=230.16000366210938, low=226.66000366210938, close=228.27999877929688, volume=36211800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-20, open=228.05999755859375, high=229.92999267578125, low=225.88999938964844, close=229.0, volume=35169600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-21, open=228.8800048828125, high=230.16000366210938, low=225.7100067138672, close=228.52000427246094, volume=42108300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-22, open=228.05999755859375, high=230.72000122070312, low=228.05999755859375, close=229.8699951171875, volume=38168300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-25, open=231.4600067138672, high=233.25, low=229.74000549316406, close=232.8699951171875, volume=90152800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-26, open=233.3300018310547, high=235.57000732421875, low=233.3300018310547, close=235.05999755859375, volume=45986200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-27, open=234.47000122070312, high=235.69000244140625, low=233.80999755859375, close=234.92999267578125, volume=33498400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-29, open=234.80999755859375, high=237.80999755859375, low=233.97000122070312, close=237.3300018310547, volume=28481400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-02, open=237.27000427246094, high=240.7899932861328, low=237.16000366210938, close=239.58999633789062, volume=48137100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-03, open=239.80999755859375, high=242.75999450683594, low=238.89999389648438, close=242.64999389648438, volume=38861000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-04, open=242.8699951171875, high=244.11000061035156, low=241.25, close=243.00999450683594, volume=44383900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-05, open=243.99000549316406, high=244.5399932861328, low=242.1300048828125, close=243.0399932861328, volume=40033900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-06, open=242.91000366210938, high=244.6300048828125, low=242.0800018310547, close=242.83999633789062, volume=36870600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-09, open=241.8300018310547, high=247.24000549316406, low=241.75, close=246.75, volume=44649200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-10, open=246.88999938964844, high=248.2100067138672, low=245.33999633789062, close=247.77000427246094, volume=36914800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-11, open=247.9600067138672, high=250.8000030517578, low=246.25999450683594, close=246.49000549316406, volume=45205800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-12, open=246.88999938964844, high=248.74000549316406, low=245.67999267578125, close=247.9600067138672, volume=32777500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-13, open=247.82000732421875, high=249.2899932861328, low=246.24000549316406, close=248.1300048828125, volume=33155300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-16, open=247.99000549316406, high=251.3800048828125, low=247.64999389648438, close=251.0399932861328, volume=51694800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-17, open=250.0800018310547, high=253.8300018310547, low=249.77999877929688, close=253.47999572753906, volume=51356400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-18, open=252.16000366210938, high=254.27999877929688, low=247.74000549316406, close=248.0500030517578, volume=56774100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-19, open=247.5, high=252.0, low=247.08999633789062, close=249.7899932861328, volume=60882300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-20, open=248.0399932861328, high=255.0, low=245.69000244140625, close=254.49000549316406, volume=147495300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-23, open=254.77000427246094, high=255.64999389648438, low=253.4499969482422, close=255.27000427246094, volume=40858800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-24, open=255.49000549316406, high=258.2099914550781, low=255.2899932861328, close=258.20001220703125, volume=23234700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-26, open=258.19000244140625, high=260.1000061035156, low=257.6300048828125, close=259.0199890136719, volume=27237100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-27, open=257.8299865722656, high=258.70001220703125, low=253.05999755859375, close=255.58999633789062, volume=42355300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-30, open=252.22999572753906, high=253.5, low=250.75, close=252.1999969482422, volume=35557500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-31, open=252.44000244140625, high=253.27999877929688, low=249.42999267578125, close=250.4199981689453, volume=39480700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-02, open=248.92999267578125, high=249.10000610351562, low=241.82000732421875, close=243.85000610351562, volume=55740700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-03, open=243.36000061035156, high=244.17999267578125, low=241.88999938964844, close=243.36000061035156, volume=40244100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-06, open=244.30999755859375, high=247.3300018310547, low=243.1999969482422, close=245.0, volume=45045600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-07, open=242.97999572753906, high=245.5500030517578, low=241.35000610351562, close=242.2100067138672, volume=40856000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-08, open=241.9199981689453, high=243.7100067138672, low=240.0500030517578, close=242.6999969482422, volume=37628900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-10, open=240.00999450683594, high=240.16000366210938, low=233.0, close=236.85000610351562, volume=61710900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-13, open=233.52999877929688, high=234.6699981689453, low=229.72000122070312, close=234.39999389648438, volume=49630700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-14, open=234.75, high=236.1199951171875, low=232.47000122070312, close=233.27999877929688, volume=39435300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-15, open=234.63999938964844, high=238.9600067138672, low=234.42999267578125, close=237.8699951171875, volume=39832000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-16, open=237.35000610351562, high=238.00999450683594, low=228.02999877929688, close=228.25999450683594, volume=71759100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-17, open=232.1199951171875, high=232.2899932861328, low=228.47999572753906, close=229.97999572753906, volume=68488300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-21, open=224.0, high=224.4199981689453, low=219.3800048828125, close=222.63999938964844, volume=98070400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-22, open=219.7899932861328, high=224.1199951171875, low=219.7899932861328, close=223.8300018310547, volume=64126500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-23, open=224.74000549316406, high=227.02999877929688, low=222.3000030517578, close=223.66000366210938, volume=60234800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-24, open=224.77999877929688, high=225.6300048828125, low=221.41000366210938, close=222.77999877929688, volume=54697900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-27, open=224.02000427246094, high=232.14999389648438, low=223.97999572753906, close=229.86000061035156, volume=94863400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-28, open=230.85000610351562, high=240.19000244140625, low=230.80999755859375, close=238.25999450683594, volume=75707600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-29, open=234.1199951171875, high=239.86000061035156, low=234.00999450683594, close=239.36000061035156, volume=45486100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-30, open=238.6699981689453, high=240.7899932861328, low=237.2100067138672, close=237.58999633789062, volume=55658300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-31, open=247.19000244140625, high=247.19000244140625, low=233.44000244140625, close=236.0, volume=101075100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-03, open=229.99000549316406, high=231.8300018310547, low=225.6999969482422, close=228.00999450683594, volume=73063300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-04, open=227.25, high=233.1300048828125, low=226.64999389648438, close=232.8000030517578, volume=45067300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-05, open=228.52999877929688, high=232.6699981689453, low=228.27000427246094, close=232.47000122070312, volume=39620300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-06, open=231.2899932861328, high=233.8000030517578, low=230.42999267578125, close=233.22000122070312, volume=29925300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-07, open=232.60000610351562, high=234.0, low=227.25999450683594, close=227.6300048828125, volume=39707200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-10, open=229.57000732421875, high=230.58999633789062, low=227.1999969482422, close=227.64999389648438, volume=33115600, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2025-02-11, open=228.1999969482422, high=235.22999572753906, low=228.1300048828125, close=232.6199951171875, volume=53718400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-12, open=231.1999969482422, high=236.9600067138672, low=230.67999267578125, close=236.8699951171875, volume=45243300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-13, open=236.91000366210938, high=242.33999633789062, low=235.57000732421875, close=241.52999877929688, volume=53614100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-14, open=241.07000732421875, high=245.41000366210938, low=241.0, close=244.60000610351562, volume=40145605, vwap=None, split_ratio=None, dividend=0.0)]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 3 - }, { "metadata": { "ExecuteTime": { diff --git a/notebooks/varcovar_var_portfolio.ipynb b/notebooks/varcovar_var_portfolio.ipynb index 425bf13..965a664 100644 --- a/notebooks/varcovar_var_portfolio.ipynb +++ b/notebooks/varcovar_var_portfolio.ipynb @@ -6,14 +6,27 @@ "metadata": { "collapsed": true, "ExecuteTime": { - "end_time": "2025-02-15T20:07:39.398175Z", - "start_time": "2025-02-15T20:07:34.126281Z" + "end_time": "2025-02-15T23:38:23.437304Z", + "start_time": "2025-02-15T23:38:18.283134Z" } }, "source": [ "import matplotlib.pyplot as plt\n", + "import numpy as np\n", "from openbb import obb\n", - "import pyfinlib\n" + "import pyfinlib\n", + "import logging\n", + "\n", + "# logging.basicConfig(level=logging.DEBUG)\n", + "\n", + "# Create our portfolio of equities\n", + "tickers = ['AAPL','META', 'C', 'DIS']\n", + "\n", + "# Set the investment weights (I arbitrarily picked for example)\n", + "weights = np.array([.25, .3, .15, .3])\n", + "\n", + "# Set an initial investment level\n", + "initial_investment = 1000000\n" ], "outputs": [], "execution_count": 1 @@ -21,281 +34,64 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-02-15T20:07:39.862808Z", - "start_time": "2025-02-15T20:07:39.401473Z" + "end_time": "2025-02-15T23:38:25.013640Z", + "start_time": "2025-02-15T23:38:24.301243Z" } }, "cell_type": "code", - "source": "aapl = obb.equity.price.historical(symbol='AAPL', provider='yfinance')", + "source": [ + "data = obb.equity.price.historical(symbol=tickers, provider='yfinance')\n", + "data.results[0].date, data.results[-1].date" + ], "id": "e5573366e39b2962", - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(datetime.date(2024, 2, 15), datetime.date(2025, 2, 14))" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "execution_count": 2 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-02-15T20:07:39.992579Z", - "start_time": "2025-02-15T20:07:39.984673Z" + "end_time": "2025-02-15T23:38:25.026860Z", + "start_time": "2025-02-15T23:38:25.018102Z" } }, "cell_type": "code", - "source": "aapl.results", - "id": "ba361e8697a2e425", + "source": [ + "returns = pyfinlib.util.rates_of_change([i.close for i in data.results if i.symbol == 'AAPL'])\n", + "portfolio = pyfinlib.Portfolio(\n", + " [\n", + " pyfinlib.PortfolioAsset(.25, \"AAPL\", [i.close for i in data.results if i.symbol == 'AAPL']),\n", + " pyfinlib.PortfolioAsset(.3, \"META\", [i.close for i in data.results if i.symbol == 'META']),\n", + " pyfinlib.PortfolioAsset(.15, \"C\", [i.close for i in data.results if i.symbol == 'C']),\n", + " pyfinlib.PortfolioAsset(.3, \"DIS\", [i.close for i in data.results if i.symbol == 'DIS']),\n", + " ]\n", + ")\n", + "\n", + "aapl_portfolio = pyfinlib.Portfolio(\n", + " [\n", + " pyfinlib.PortfolioAsset(1., \"AAPL\", [i.close for i in data.results if i.symbol == 'AAPL'])\n", + " ]\n", + ")\n", + "VaR_historical = aapl_portfolio.value_at_risk_percent(0.05)\n", + "VaR_historical_10 = aapl_portfolio.value_at_risk_percent(0.1)\n", + "VaR_historical, VaR_historical_10" + ], + "id": "28a68dea99911874", "outputs": [ { "data": { "text/plain": [ - "[YFinanceEquityHistoricalData(date=2024-02-15, open=183.5500030517578, high=184.49000549316406, low=181.35000610351562, close=183.86000061035156, volume=65434500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-16, open=183.4199981689453, high=184.85000610351562, low=181.6699981689453, close=182.30999755859375, volume=49701400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-20, open=181.7899932861328, high=182.42999267578125, low=180.0, close=181.55999755859375, volume=53665600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-21, open=181.94000244140625, high=182.88999938964844, low=180.66000366210938, close=182.32000732421875, volume=41529700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-22, open=183.47999572753906, high=184.9600067138672, low=182.4600067138672, close=184.3699951171875, volume=52292200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-23, open=185.00999450683594, high=185.0399932861328, low=182.22999572753906, close=182.52000427246094, volume=45119700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-26, open=182.24000549316406, high=182.75999450683594, low=180.64999389648438, close=181.16000366210938, volume=40867400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-27, open=181.10000610351562, high=183.9199981689453, low=179.55999755859375, close=182.6300048828125, volume=54318900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-28, open=182.50999450683594, high=183.1199951171875, low=180.1300048828125, close=181.4199981689453, volume=48953900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-02-29, open=181.27000427246094, high=182.57000732421875, low=179.52999877929688, close=180.75, volume=136682600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-01, open=179.5500030517578, high=180.52999877929688, low=177.3800048828125, close=179.66000366210938, volume=73488000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-04, open=176.14999389648438, high=176.89999389648438, low=173.7899932861328, close=175.10000610351562, volume=81510100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-05, open=170.75999450683594, high=172.0399932861328, low=169.6199951171875, close=170.1199951171875, volume=95132400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-06, open=171.05999755859375, high=171.24000549316406, low=168.67999267578125, close=169.1199951171875, volume=68587700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-07, open=169.14999389648438, high=170.72999572753906, low=168.49000549316406, close=169.0, volume=71765100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-08, open=169.0, high=173.6999969482422, low=168.94000244140625, close=170.72999572753906, volume=76114600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-11, open=172.94000244140625, high=174.3800048828125, low=172.0500030517578, close=172.75, volume=60139500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-12, open=173.14999389648438, high=174.02999877929688, low=171.00999450683594, close=173.22999572753906, volume=59825400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-13, open=172.77000427246094, high=173.19000244140625, low=170.75999450683594, close=171.1300048828125, volume=52488700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-14, open=172.91000366210938, high=174.30999755859375, low=172.0500030517578, close=173.0, volume=72913500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-15, open=171.1699981689453, high=172.6199951171875, low=170.2899932861328, close=172.6199951171875, volume=121664700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-18, open=175.57000732421875, high=177.7100067138672, low=173.52000427246094, close=173.72000122070312, volume=75604200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-19, open=174.33999633789062, high=176.61000061035156, low=173.02999877929688, close=176.0800018310547, volume=55215200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-20, open=175.72000122070312, high=178.6699981689453, low=175.08999633789062, close=178.6699981689453, volume=53423100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-21, open=177.0500030517578, high=177.49000549316406, low=170.83999633789062, close=171.3699951171875, volume=106181300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-22, open=171.75999450683594, high=173.0500030517578, low=170.05999755859375, close=172.27999877929688, volume=71106600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-25, open=170.57000732421875, high=171.94000244140625, low=169.4499969482422, close=170.85000610351562, volume=54288300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-26, open=170.0, high=171.4199981689453, low=169.5800018310547, close=169.7100067138672, volume=57388400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-27, open=170.41000366210938, high=173.60000610351562, low=170.11000061035156, close=173.30999755859375, volume=60273300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-03-28, open=171.75, high=172.22999572753906, low=170.50999450683594, close=171.47999572753906, volume=65672700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-01, open=171.19000244140625, high=171.25, low=169.47999572753906, close=170.02999877929688, volume=46240500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-02, open=169.0800018310547, high=169.33999633789062, low=168.22999572753906, close=168.83999633789062, volume=49329500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-03, open=168.7899932861328, high=170.67999267578125, low=168.5800018310547, close=169.64999389648438, volume=47691700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-04, open=170.2899932861328, high=171.9199981689453, low=168.82000732421875, close=168.82000732421875, volume=53704400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-05, open=169.58999633789062, high=170.38999938964844, low=168.9499969482422, close=169.5800018310547, volume=42055200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-08, open=169.02999877929688, high=169.1999969482422, low=168.24000549316406, close=168.4499969482422, volume=37425500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-09, open=168.6999969482422, high=170.0800018310547, low=168.35000610351562, close=169.6699981689453, volume=42451200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-10, open=168.8000030517578, high=169.08999633789062, low=167.11000061035156, close=167.77999877929688, volume=49709300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-11, open=168.33999633789062, high=175.4600067138672, low=168.16000366210938, close=175.0399932861328, volume=91070300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-12, open=174.25999450683594, high=178.36000061035156, low=174.2100067138672, close=176.5500030517578, volume=101593300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-15, open=175.36000061035156, high=176.6300048828125, low=172.5, close=172.69000244140625, volume=73531800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-16, open=171.75, high=173.75999450683594, low=168.27000427246094, close=169.3800048828125, volume=73711200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-17, open=169.61000061035156, high=170.64999389648438, low=168.0, close=168.0, volume=50901200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-18, open=168.02999877929688, high=168.63999938964844, low=166.5500030517578, close=167.0399932861328, volume=43122900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-19, open=166.2100067138672, high=166.39999389648438, low=164.0800018310547, close=165.0, volume=67772100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-22, open=165.52000427246094, high=167.25999450683594, low=164.77000427246094, close=165.83999633789062, volume=48116400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-23, open=165.35000610351562, high=167.0500030517578, low=164.9199981689453, close=166.89999389648438, volume=49537800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-24, open=166.5399932861328, high=169.3000030517578, low=166.2100067138672, close=169.02000427246094, volume=48251800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-25, open=169.52999877929688, high=170.61000061035156, low=168.14999389648438, close=169.88999938964844, volume=50558300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-26, open=169.8800048828125, high=171.33999633789062, low=169.17999267578125, close=169.3000030517578, volume=44838400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-29, open=173.3699951171875, high=176.02999877929688, low=173.10000610351562, close=173.5, volume=68169400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-04-30, open=173.3300018310547, high=174.99000549316406, low=170.0, close=170.3300018310547, volume=65934800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-01, open=169.5800018310547, high=172.7100067138672, low=169.11000061035156, close=169.3000030517578, volume=50383100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-02, open=172.50999450683594, high=173.4199981689453, low=170.88999938964844, close=173.02999877929688, volume=94214900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-03, open=186.64999389648438, high=187.0, low=182.66000366210938, close=183.3800048828125, volume=163224100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-06, open=182.35000610351562, high=184.1999969482422, low=180.4199981689453, close=181.7100067138672, volume=78569700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-07, open=183.4499969482422, high=184.89999389648438, low=181.32000732421875, close=182.39999389648438, volume=77305800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-08, open=182.85000610351562, high=183.07000732421875, low=181.4499969482422, close=182.74000549316406, volume=45057100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-09, open=182.55999755859375, high=184.66000366210938, low=182.11000061035156, close=184.57000732421875, volume=48983000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-10, open=184.89999389648438, high=185.08999633789062, low=182.1300048828125, close=183.0500030517578, volume=50759500, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-05-13, open=185.44000244140625, high=187.10000610351562, low=184.6199951171875, close=186.27999877929688, volume=72044800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-14, open=187.50999450683594, high=188.3000030517578, low=186.2899932861328, close=187.42999267578125, volume=52393600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-15, open=187.91000366210938, high=190.64999389648438, low=187.3699951171875, close=189.72000122070312, volume=70400000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-16, open=190.47000122070312, high=191.10000610351562, low=189.66000366210938, close=189.83999633789062, volume=52845200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-17, open=189.50999450683594, high=190.80999755859375, low=189.17999267578125, close=189.8699951171875, volume=41282900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-20, open=189.3300018310547, high=191.9199981689453, low=189.00999450683594, close=191.0399932861328, volume=44361300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-21, open=191.08999633789062, high=192.72999572753906, low=190.9199981689453, close=192.35000610351562, volume=42309400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-22, open=192.27000427246094, high=192.82000732421875, low=190.27000427246094, close=190.89999389648438, volume=34648500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-23, open=190.97999572753906, high=191.0, low=186.6300048828125, close=186.8800048828125, volume=51005900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-24, open=188.82000732421875, high=190.5800018310547, low=188.0399932861328, close=189.97999572753906, volume=36294600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-28, open=191.50999450683594, high=193.0, low=189.10000610351562, close=189.99000549316406, volume=52280100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-29, open=189.61000061035156, high=192.25, low=189.50999450683594, close=190.2899932861328, volume=53068000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-30, open=190.75999450683594, high=192.17999267578125, low=190.6300048828125, close=191.2899932861328, volume=49947900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-05-31, open=191.44000244140625, high=192.57000732421875, low=189.91000366210938, close=192.25, volume=75158300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-03, open=192.89999389648438, high=194.99000549316406, low=192.52000427246094, close=194.02999877929688, volume=50080500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-04, open=194.63999938964844, high=195.32000732421875, low=193.02999877929688, close=194.35000610351562, volume=47471400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-05, open=195.39999389648438, high=196.89999389648438, low=194.8699951171875, close=195.8699951171875, volume=54156800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-06, open=195.69000244140625, high=196.5, low=194.1699981689453, close=194.47999572753906, volume=41181800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-07, open=194.64999389648438, high=196.94000244140625, low=194.13999938964844, close=196.88999938964844, volume=53103900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-10, open=196.89999389648438, high=197.3000030517578, low=192.14999389648438, close=193.1199951171875, volume=97262100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-11, open=193.64999389648438, high=207.16000366210938, low=193.6300048828125, close=207.14999389648438, volume=172373300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-12, open=207.3699951171875, high=220.1999969482422, low=206.89999389648438, close=213.07000732421875, volume=198134300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-13, open=214.74000549316406, high=216.75, low=211.60000610351562, close=214.24000549316406, volume=97862700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-14, open=213.85000610351562, high=215.1699981689453, low=211.3000030517578, close=212.49000549316406, volume=70122700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-17, open=213.3699951171875, high=218.9499969482422, low=212.72000122070312, close=216.6699981689453, volume=93728300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-18, open=217.58999633789062, high=218.6300048828125, low=213.0, close=214.2899932861328, volume=79943300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-20, open=213.92999267578125, high=214.24000549316406, low=208.85000610351562, close=209.67999267578125, volume=86172500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-21, open=210.38999938964844, high=211.88999938964844, low=207.11000061035156, close=207.49000549316406, volume=246421400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-24, open=207.72000122070312, high=212.6999969482422, low=206.58999633789062, close=208.13999938964844, volume=80727000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-25, open=209.14999389648438, high=211.3800048828125, low=208.61000061035156, close=209.07000732421875, volume=56713900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-26, open=211.5, high=214.86000061035156, low=210.63999938964844, close=213.25, volume=66213200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-27, open=214.69000244140625, high=215.74000549316406, low=212.35000610351562, close=214.10000610351562, volume=49772700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-06-28, open=215.77000427246094, high=216.07000732421875, low=210.3000030517578, close=210.6199951171875, volume=82542700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-01, open=212.08999633789062, high=217.50999450683594, low=211.9199981689453, close=216.75, volume=60402900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-02, open=216.14999389648438, high=220.3800048828125, low=215.10000610351562, close=220.27000427246094, volume=58046200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-03, open=220.0, high=221.5500030517578, low=219.02999877929688, close=221.5500030517578, volume=37369800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-05, open=221.64999389648438, high=226.4499969482422, low=221.64999389648438, close=226.33999633789062, volume=60412400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-08, open=227.08999633789062, high=227.85000610351562, low=223.25, close=227.82000732421875, volume=59085900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-09, open=227.92999267578125, high=229.39999389648438, low=226.3699951171875, close=228.67999267578125, volume=48076100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-10, open=229.3000030517578, high=233.0800018310547, low=229.25, close=232.97999572753906, volume=62627700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-11, open=231.38999938964844, high=232.38999938964844, low=225.77000427246094, close=227.57000732421875, volume=64710600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-12, open=228.9199981689453, high=232.63999938964844, low=228.67999267578125, close=230.5399932861328, volume=53046500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-15, open=236.47999572753906, high=237.22999572753906, low=233.08999633789062, close=234.39999389648438, volume=62631300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-16, open=235.0, high=236.27000427246094, low=232.3300018310547, close=234.82000732421875, volume=43234300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-17, open=229.4499969482422, high=231.4600067138672, low=226.63999938964844, close=228.8800048828125, volume=57345900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-18, open=230.27999877929688, high=230.44000244140625, low=222.27000427246094, close=224.17999267578125, volume=66034600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-19, open=224.82000732421875, high=226.8000030517578, low=223.27999877929688, close=224.30999755859375, volume=49151500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-22, open=227.00999450683594, high=227.77999877929688, low=223.08999633789062, close=223.9600067138672, volume=48201800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-23, open=224.3699951171875, high=226.94000244140625, low=222.67999267578125, close=225.00999450683594, volume=39960300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-24, open=224.0, high=224.8000030517578, low=217.1300048828125, close=218.5399932861328, volume=61777600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-25, open=218.92999267578125, high=220.85000610351562, low=214.6199951171875, close=217.49000549316406, volume=51391200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-26, open=218.6999969482422, high=219.49000549316406, low=216.00999450683594, close=217.9600067138672, volume=41601300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-29, open=216.9600067138672, high=219.3000030517578, low=215.75, close=218.24000549316406, volume=36311800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-30, open=219.19000244140625, high=220.3300018310547, low=216.1199951171875, close=218.8000030517578, volume=41643800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-07-31, open=221.44000244140625, high=223.82000732421875, low=220.6300048828125, close=222.0800018310547, volume=50036300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-01, open=224.3699951171875, high=224.47999572753906, low=217.02000427246094, close=218.36000061035156, volume=62501000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-02, open=219.14999389648438, high=225.60000610351562, low=217.7100067138672, close=219.86000061035156, volume=105568600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-05, open=199.08999633789062, high=213.5, low=196.0, close=209.27000427246094, volume=119548600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-06, open=205.3000030517578, high=209.99000549316406, low=201.07000732421875, close=207.22999572753906, volume=69660500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-07, open=206.89999389648438, high=213.63999938964844, low=206.38999938964844, close=209.82000732421875, volume=63516400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-08, open=213.11000061035156, high=214.1999969482422, low=208.8300018310547, close=213.30999755859375, volume=47161100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-09, open=212.10000610351562, high=216.77999877929688, low=211.97000122070312, close=216.24000549316406, volume=42201600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-12, open=216.07000732421875, high=219.50999450683594, low=215.60000610351562, close=217.52999877929688, volume=38028100, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-08-13, open=219.00999450683594, high=221.88999938964844, low=219.00999450683594, close=221.27000427246094, volume=44155300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-14, open=220.57000732421875, high=223.02999877929688, low=219.6999969482422, close=221.72000122070312, volume=41960600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-15, open=224.60000610351562, high=225.35000610351562, low=222.75999450683594, close=224.72000122070312, volume=46414000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-16, open=223.9199981689453, high=226.8300018310547, low=223.64999389648438, close=226.0500030517578, volume=44340200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-19, open=225.72000122070312, high=225.99000549316406, low=223.0399932861328, close=225.88999938964844, volume=40687800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-20, open=225.77000427246094, high=227.1699981689453, low=225.4499969482422, close=226.50999450683594, volume=30299000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-21, open=226.52000427246094, high=227.97999572753906, low=225.0500030517578, close=226.39999389648438, volume=34765500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-22, open=227.7899932861328, high=228.33999633789062, low=223.89999389648438, close=224.52999877929688, volume=43695300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-23, open=225.66000366210938, high=228.22000122070312, low=224.3300018310547, close=226.83999633789062, volume=38677300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-26, open=226.75999450683594, high=227.27999877929688, low=223.88999938964844, close=227.17999267578125, volume=30602200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-27, open=226.0, high=228.85000610351562, low=224.88999938964844, close=228.02999877929688, volume=35934600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-28, open=227.9199981689453, high=229.86000061035156, low=225.67999267578125, close=226.49000549316406, volume=38052200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-29, open=230.10000610351562, high=232.9199981689453, low=228.8800048828125, close=229.7899932861328, volume=51906300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-08-30, open=230.19000244140625, high=230.39999389648438, low=227.47999572753906, close=229.0, volume=52990800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-03, open=228.5500030517578, high=229.0, low=221.1699981689453, close=222.77000427246094, volume=50190600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-04, open=221.66000366210938, high=221.77999877929688, low=217.47999572753906, close=220.85000610351562, volume=43840200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-05, open=221.6300048828125, high=225.47999572753906, low=221.52000427246094, close=222.3800048828125, volume=36615400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-06, open=223.9499969482422, high=225.24000549316406, low=219.77000427246094, close=220.82000732421875, volume=48423000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-09, open=220.82000732421875, high=221.27000427246094, low=216.7100067138672, close=220.91000366210938, volume=67180000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-10, open=218.9199981689453, high=221.47999572753906, low=216.72999572753906, close=220.11000061035156, volume=51591000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-11, open=221.4600067138672, high=223.08999633789062, low=217.88999938964844, close=222.66000366210938, volume=44587100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-12, open=222.5, high=223.5500030517578, low=219.82000732421875, close=222.77000427246094, volume=37498200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-13, open=223.5800018310547, high=224.0399932861328, low=221.91000366210938, close=222.5, volume=36766600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-16, open=216.5399932861328, high=217.22000122070312, low=213.9199981689453, close=216.32000732421875, volume=59357400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-17, open=215.75, high=216.89999389648438, low=214.5, close=216.7899932861328, volume=45519300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-18, open=217.5500030517578, high=222.7100067138672, low=217.5399932861328, close=220.69000244140625, volume=59894900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-19, open=224.99000549316406, high=229.82000732421875, low=224.6300048828125, close=228.8699951171875, volume=66781300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-20, open=229.97000122070312, high=233.08999633789062, low=227.6199951171875, close=228.1999969482422, volume=318679900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-23, open=227.33999633789062, high=229.4499969482422, low=225.80999755859375, close=226.47000122070312, volume=54146000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-24, open=228.64999389648438, high=229.35000610351562, low=225.72999572753906, close=227.3699951171875, volume=43556100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-25, open=224.92999267578125, high=227.2899932861328, low=224.02000427246094, close=226.3699951171875, volume=42308700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-26, open=227.3000030517578, high=228.5, low=225.41000366210938, close=227.52000427246094, volume=36636700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-27, open=228.4600067138672, high=229.52000427246094, low=227.3000030517578, close=227.7899932861328, volume=34026000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-09-30, open=230.0399932861328, high=233.0, low=229.64999389648438, close=233.0, volume=54541900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-01, open=229.52000427246094, high=229.64999389648438, low=223.74000549316406, close=226.2100067138672, volume=63285000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-02, open=225.88999938964844, high=227.3699951171875, low=223.02000427246094, close=226.77999877929688, volume=32880600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-03, open=225.13999938964844, high=226.80999755859375, low=223.32000732421875, close=225.6699981689453, volume=34044200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-04, open=227.89999389648438, high=228.0, low=224.1300048828125, close=226.8000030517578, volume=37245100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-07, open=224.5, high=225.69000244140625, low=221.3300018310547, close=221.69000244140625, volume=39505400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-08, open=224.3000030517578, high=225.97999572753906, low=223.25, close=225.77000427246094, volume=31855700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-09, open=225.22999572753906, high=229.75, low=224.8300018310547, close=229.5399932861328, volume=33591100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-10, open=227.77999877929688, high=229.5, low=227.1699981689453, close=229.0399932861328, volume=28183500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-11, open=229.3000030517578, high=229.41000366210938, low=227.33999633789062, close=227.5500030517578, volume=31759200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-14, open=228.6999969482422, high=231.72999572753906, low=228.60000610351562, close=231.3000030517578, volume=39882100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-15, open=233.61000061035156, high=237.49000549316406, low=232.3699951171875, close=233.85000610351562, volume=64751400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-16, open=231.60000610351562, high=232.1199951171875, low=229.83999633789062, close=231.77999877929688, volume=34082200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-17, open=233.42999267578125, high=233.85000610351562, low=230.52000427246094, close=232.14999389648438, volume=32993800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-18, open=236.17999267578125, high=236.17999267578125, low=234.00999450683594, close=235.0, volume=46431500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-21, open=234.4499969482422, high=236.85000610351562, low=234.4499969482422, close=236.47999572753906, volume=36254500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-22, open=233.88999938964844, high=236.22000122070312, low=232.60000610351562, close=235.86000061035156, volume=38846600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-23, open=234.0800018310547, high=235.13999938964844, low=227.75999450683594, close=230.75999450683594, volume=52287000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-24, open=229.97999572753906, high=230.82000732421875, low=228.41000366210938, close=230.57000732421875, volume=31109500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-25, open=229.74000549316406, high=233.22000122070312, low=229.57000732421875, close=231.41000366210938, volume=38802300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-28, open=233.32000732421875, high=234.72999572753906, low=232.5500030517578, close=233.39999389648438, volume=36087100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-29, open=233.10000610351562, high=234.3300018310547, low=232.32000732421875, close=233.6699981689453, volume=35417200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-30, open=232.61000061035156, high=233.47000122070312, low=229.5500030517578, close=230.10000610351562, volume=47070900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-10-31, open=229.33999633789062, high=229.8300018310547, low=225.3699951171875, close=225.91000366210938, volume=64370100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-01, open=220.97000122070312, high=225.35000610351562, low=220.27000427246094, close=222.91000366210938, volume=65276700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-04, open=220.99000549316406, high=222.7899932861328, low=219.7100067138672, close=222.00999450683594, volume=44944500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-05, open=221.8000030517578, high=223.9499969482422, low=221.13999938964844, close=223.4499969482422, volume=28111300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-06, open=222.61000061035156, high=226.07000732421875, low=221.19000244140625, close=222.72000122070312, volume=54561100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-07, open=224.6300048828125, high=227.8800048828125, low=224.57000732421875, close=227.47999572753906, volume=42137700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-08, open=227.1699981689453, high=228.66000366210938, low=226.41000366210938, close=226.9600067138672, volume=38328800, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2024-11-11, open=225.0, high=225.6999969482422, low=221.5, close=224.22999572753906, volume=42005600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-12, open=224.5500030517578, high=225.58999633789062, low=223.36000061035156, close=224.22999572753906, volume=40398300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-13, open=224.00999450683594, high=226.64999389648438, low=222.75999450683594, close=225.1199951171875, volume=48566200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-14, open=225.02000427246094, high=228.8699951171875, low=225.0, close=228.22000122070312, volume=44923900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-15, open=226.39999389648438, high=226.9199981689453, low=224.27000427246094, close=225.0, volume=47923700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-18, open=225.25, high=229.74000549316406, low=225.1699981689453, close=228.02000427246094, volume=44686000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-19, open=226.97999572753906, high=230.16000366210938, low=226.66000366210938, close=228.27999877929688, volume=36211800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-20, open=228.05999755859375, high=229.92999267578125, low=225.88999938964844, close=229.0, volume=35169600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-21, open=228.8800048828125, high=230.16000366210938, low=225.7100067138672, close=228.52000427246094, volume=42108300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-22, open=228.05999755859375, high=230.72000122070312, low=228.05999755859375, close=229.8699951171875, volume=38168300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-25, open=231.4600067138672, high=233.25, low=229.74000549316406, close=232.8699951171875, volume=90152800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-26, open=233.3300018310547, high=235.57000732421875, low=233.3300018310547, close=235.05999755859375, volume=45986200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-27, open=234.47000122070312, high=235.69000244140625, low=233.80999755859375, close=234.92999267578125, volume=33498400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-11-29, open=234.80999755859375, high=237.80999755859375, low=233.97000122070312, close=237.3300018310547, volume=28481400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-02, open=237.27000427246094, high=240.7899932861328, low=237.16000366210938, close=239.58999633789062, volume=48137100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-03, open=239.80999755859375, high=242.75999450683594, low=238.89999389648438, close=242.64999389648438, volume=38861000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-04, open=242.8699951171875, high=244.11000061035156, low=241.25, close=243.00999450683594, volume=44383900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-05, open=243.99000549316406, high=244.5399932861328, low=242.1300048828125, close=243.0399932861328, volume=40033900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-06, open=242.91000366210938, high=244.6300048828125, low=242.0800018310547, close=242.83999633789062, volume=36870600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-09, open=241.8300018310547, high=247.24000549316406, low=241.75, close=246.75, volume=44649200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-10, open=246.88999938964844, high=248.2100067138672, low=245.33999633789062, close=247.77000427246094, volume=36914800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-11, open=247.9600067138672, high=250.8000030517578, low=246.25999450683594, close=246.49000549316406, volume=45205800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-12, open=246.88999938964844, high=248.74000549316406, low=245.67999267578125, close=247.9600067138672, volume=32777500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-13, open=247.82000732421875, high=249.2899932861328, low=246.24000549316406, close=248.1300048828125, volume=33155300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-16, open=247.99000549316406, high=251.3800048828125, low=247.64999389648438, close=251.0399932861328, volume=51694800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-17, open=250.0800018310547, high=253.8300018310547, low=249.77999877929688, close=253.47999572753906, volume=51356400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-18, open=252.16000366210938, high=254.27999877929688, low=247.74000549316406, close=248.0500030517578, volume=56774100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-19, open=247.5, high=252.0, low=247.08999633789062, close=249.7899932861328, volume=60882300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-20, open=248.0399932861328, high=255.0, low=245.69000244140625, close=254.49000549316406, volume=147495300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-23, open=254.77000427246094, high=255.64999389648438, low=253.4499969482422, close=255.27000427246094, volume=40858800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-24, open=255.49000549316406, high=258.2099914550781, low=255.2899932861328, close=258.20001220703125, volume=23234700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-26, open=258.19000244140625, high=260.1000061035156, low=257.6300048828125, close=259.0199890136719, volume=27237100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-27, open=257.8299865722656, high=258.70001220703125, low=253.05999755859375, close=255.58999633789062, volume=42355300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-30, open=252.22999572753906, high=253.5, low=250.75, close=252.1999969482422, volume=35557500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2024-12-31, open=252.44000244140625, high=253.27999877929688, low=249.42999267578125, close=250.4199981689453, volume=39480700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-02, open=248.92999267578125, high=249.10000610351562, low=241.82000732421875, close=243.85000610351562, volume=55740700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-03, open=243.36000061035156, high=244.17999267578125, low=241.88999938964844, close=243.36000061035156, volume=40244100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-06, open=244.30999755859375, high=247.3300018310547, low=243.1999969482422, close=245.0, volume=45045600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-07, open=242.97999572753906, high=245.5500030517578, low=241.35000610351562, close=242.2100067138672, volume=40856000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-08, open=241.9199981689453, high=243.7100067138672, low=240.0500030517578, close=242.6999969482422, volume=37628900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-10, open=240.00999450683594, high=240.16000366210938, low=233.0, close=236.85000610351562, volume=61710900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-13, open=233.52999877929688, high=234.6699981689453, low=229.72000122070312, close=234.39999389648438, volume=49630700, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-14, open=234.75, high=236.1199951171875, low=232.47000122070312, close=233.27999877929688, volume=39435300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-15, open=234.63999938964844, high=238.9600067138672, low=234.42999267578125, close=237.8699951171875, volume=39832000, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-16, open=237.35000610351562, high=238.00999450683594, low=228.02999877929688, close=228.25999450683594, volume=71759100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-17, open=232.1199951171875, high=232.2899932861328, low=228.47999572753906, close=229.97999572753906, volume=68488300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-21, open=224.0, high=224.4199981689453, low=219.3800048828125, close=222.63999938964844, volume=98070400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-22, open=219.7899932861328, high=224.1199951171875, low=219.7899932861328, close=223.8300018310547, volume=64126500, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-23, open=224.74000549316406, high=227.02999877929688, low=222.3000030517578, close=223.66000366210938, volume=60234800, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-24, open=224.77999877929688, high=225.6300048828125, low=221.41000366210938, close=222.77999877929688, volume=54697900, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-27, open=224.02000427246094, high=232.14999389648438, low=223.97999572753906, close=229.86000061035156, volume=94863400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-28, open=230.85000610351562, high=240.19000244140625, low=230.80999755859375, close=238.25999450683594, volume=75707600, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-29, open=234.1199951171875, high=239.86000061035156, low=234.00999450683594, close=239.36000061035156, volume=45486100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-30, open=238.6699981689453, high=240.7899932861328, low=237.2100067138672, close=237.58999633789062, volume=55658300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-01-31, open=247.19000244140625, high=247.19000244140625, low=233.44000244140625, close=236.0, volume=101075100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-03, open=229.99000549316406, high=231.8300018310547, low=225.6999969482422, close=228.00999450683594, volume=73063300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-04, open=227.25, high=233.1300048828125, low=226.64999389648438, close=232.8000030517578, volume=45067300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-05, open=228.52999877929688, high=232.6699981689453, low=228.27000427246094, close=232.47000122070312, volume=39620300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-06, open=231.2899932861328, high=233.8000030517578, low=230.42999267578125, close=233.22000122070312, volume=29925300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-07, open=232.60000610351562, high=234.0, low=227.25999450683594, close=227.6300048828125, volume=39707200, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-10, open=229.57000732421875, high=230.58999633789062, low=227.1999969482422, close=227.64999389648438, volume=33115600, vwap=None, split_ratio=None, dividend=0.25),\n", - " YFinanceEquityHistoricalData(date=2025-02-11, open=228.1999969482422, high=235.22999572753906, low=228.1300048828125, close=232.6199951171875, volume=53718400, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-12, open=231.1999969482422, high=236.9600067138672, low=230.67999267578125, close=236.8699951171875, volume=45243300, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-13, open=236.91000366210938, high=242.33999633789062, low=235.57000732421875, close=241.52999877929688, volume=53614100, vwap=None, split_ratio=None, dividend=0.0),\n", - " YFinanceEquityHistoricalData(date=2025-02-14, open=241.25, high=245.5500030517578, low=240.99000549316406, close=244.60000610351562, volume=40838100, vwap=None, split_ratio=None, dividend=0.0)]" + "(-0.023538456317296196, -0.018062230402611013)" ] }, "execution_count": 3, @@ -308,52 +104,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-02-15T20:07:40.016044Z", - "start_time": "2025-02-15T20:07:40.014035Z" - } - }, - "cell_type": "code", - "source": "data = [i.open for i in aapl.results]", - "id": "481bc5b5742518f7", - "outputs": [], - "execution_count": 4 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2025-02-15T20:07:40.041952Z", - "start_time": "2025-02-15T20:07:40.038215Z" - } - }, - "cell_type": "code", - "source": [ - "returns = pyfinlib.util.rates_of_change(data)\n", - "portfolio = pyfinlib.Portfolio([pyfinlib.PortfolioAsset(1, \"AAPL\", data)])\n", - "\n", - "VaR_historical = portfolio.value_at_risk(0.05)\n", - "VaR_historical_10 = portfolio.value_at_risk(0.1)\n", - "VaR_historical, VaR_historical_10" - ], - "id": "28a68dea99911874", - "outputs": [ - { - "data": { - "text/plain": [ - "(-0.026022532720986438, -0.020002956044025813)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 5 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2025-02-15T20:07:40.167970Z", - "start_time": "2025-02-15T20:07:40.061711Z" + "end_time": "2025-02-15T23:38:25.157066Z", + "start_time": "2025-02-15T23:38:25.040525Z" } }, "cell_type": "code", @@ -376,7 +128,109 @@ "text/plain": [ "<Figure size 1000x600 with 1 Axes>" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAIjCAYAAADWYVDIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYqZJREFUeJzt3Qd4FOX2+PGTtmlAAOnSBZEiSLGgoDRBsCCgiA1Q/yIX9KqIKFYUEcVru1cE/SkgdlFRrl1RUAELWBDwIiBBkQ4SSELaZv7PeZdNZtNIwk4ym/1+nmfg3d2ZfWd3ssmcPe97JsKyLEsAAAAAAEak7z8AAAAAgCJIAgAAAAAbgiQAAAAAsCFIAgAAAAAbgiQAAAAAsCFIAgAAAAAbgiQAAAAAsCFIAgAAAAAbgiQAAAAAsCFIAoAK1rx5cxk9erS4SUREhEyZMsWR505OTjbPP2/ePEeeHz45OTkyadIkadKkiURGRsqFF15Y2bsEACGLIAkAjoKe+GsAsHLlyiIf79Wrl3To0OGo+/nggw8cC2LcYsmSJea99C9RUVFSr149ueiii+TXX38t13Nu27bNvG8//fSTVHVz5syRRx55xLxfL7zwgtx8882l2u6UU04x7/esWbOOuK7X65VGjRqZ9T/88MMi19H3234cExISpF27dnLXXXfJgQMHSv3ZAYDKFF2pvQNAGFq/fr35pr+sQdLMmTMdC5QOHTok0dHu+JPwz3/+U04++WTJzs6W1atXy+zZs00AtWbNGmnQoEGZg6T77rvPZO9OOukkqco+//xzOfbYY+Xxxx8v9TYbNmyQ77//3rw/L7/8svzjH/84Yh/bt2/PW3/gwIHFrqtBV7Vq1SQ1NVU++eQTmTZtmtl+2bJlJjgCADdzx19EAAgjsbGx4ga5ubmSlZUlcXFxZnGLnj17mmyIX5s2bczJ+/z5881wMjfIyMgQj8dT5mDXSbt27ZKaNWuWaZuXXnrJZOseffRR857r0EgNgEpav0uXLjJq1Ci54447JC0tTRITE4tcV5+vTp06pj127FgZNmyYvP322/LNN99I9+7dy/jqAKBiuee3OwCE6ZwkzZhotqN169YmWDnmmGOkR48e8umnn5rHdV3NIin7MCY/PVG95ZZbzFwUDcA0qPjXv/4llmUF9KvbXH/99SYD0L59e7PuRx99lPdYwSzVX3/9Jddcc40ZXqXrtmjRwgQrGlipffv2ycSJE+XEE080GYMaNWqYzMLPP/8c9KBJbdq0qdD+XX311VK/fn2zf/qadMiZn2afNCOlrrrqqrz3zT83qri5YTpEUhf78+h2r732mhkyptkaHUKmQ8d0e33tui86B0jbdevWNe+LDk2z0+27du0q1atXN++Vvm9PPvnkEV//kY6vf87XF198IWvXrs17nbrfR/LKK6+YYOa8886TpKQkc7ukbOPChQtlxIgRMnz4cHP73XffldLq06eP+X/z5s2l3gYAKguZJAAIgpSUFNmzZ0+h+zUAOhINTqZPny7/7//9PzM/RE++dZ7GDz/8IGeffbZcd911ZtiYBk0vvvhiwLZ6onzBBReYE2QNaHRI2ccffyy33nqrOXEvOPRKhzu98cYbJljSb/mLyxpof7ov+/fvlzFjxsgJJ5xgnu/NN9+U9PR0k0X5/fff5Z133pGLL77YBFA7d+6UZ555Rs466yxZt26dCa6CQYMAVatWrbz7tK/TTjstL/DTwETnyOh7oO/fTTfdJG3btpX7779f7rnnHvMa/MHW6aefXq79mDp1qnndGgBlZmaattJgaMCAAXLqqaea4OWzzz4zmZnjjjsub/iaHrtLL71U+vbtKw8//LC5T+dZ6dCzG2+8sdg+S3N89bXrz4UOZ9OhbfqzpPT1l+Tbb7+VjRs3yty5c81rGTp0qAmgNUNUlEWLFpnn1yBJhz1qIKnrX3bZZaV6//xBrn4JAACuZwEAym3u3Ln6dX6JS/v27QO2adasmTVq1Ki82506dbLOPffcEvsZP368ea6C3nnnHXP/Aw88EHD/RRddZEVERFgbN27Mu0/Xi4yMtNauXVvoefSxe++9N+/2yJEjzbrff/99oXVzc3PN/xkZGZbX6w14bPPmzVZsbKx1//33B9ynz6/vVUm++OILs96cOXOs3bt3W9u2bbM++ugjq1WrVua1fPfdd3nrXnPNNVbDhg2tPXv2BDzHiBEjrKSkJCs9Pd3c1v0vru+Cx8HvrLPOMkvB/WrZsmXe8/rp9vqY/fWqzp07W127ds27feONN1o1atSwcnJyrLIoy/HVfS74s1aS66+/3mrSpEne8fzkk09MXz/++GOR65933nnWGWeckXf72WeftaKjo61du3YFrKc/R/o869evN8dRj/8zzzxjfi7q169v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5njCmWPy888/y6WXXmp+J8XHx0vbtm3lySefDHgOPiuBZs6cKc2bNze/y0899VT57rvvSlx/wYIFcsIJJ5j1TzzxRPnggw8CHtcaSFqFtWHDhuYY9OvXTzZs2HDUxz7cBPO4ZGdny2233WbuT0xMlEaNGsnIkSNl27ZtAc+h/RX8XDz00EOOvcZw/6yMHj260Pt9zjnnBKzDZ6Xij0tx51uPPPJI+H5WrBB0zjnnWJ06dbK++eYb66uvvrJatWplXXrppSVu8/jjj1vTp083i77sv//+u8zPm5KSYtWvX9+6/PLLrTVr1livvvqqFR8fbz3zzDNWuCvPMRk7dqzVpEkTa/HixdbKlSut0047zTr99NPzHk9PT7e2b98esAwYMMA666yz8tb54osvzPFcv359wHper9fR1xsqnDguSt/zuXPnBrznhw4dynv8999/txISEqwJEyZY69ats/7zn/9YUVFR1kcffWSFOyeOyfPPP2/985//tJYsWWJt2rTJevHFF83vJn3f/fis5Hvttdcsj8djzZkzx1q7dq117bXXWjVr1rR27txZ5PrLli0zP78zZswwP8933XWXFRMTY/3yyy956zz00ENWUlKS9c4771g///yzdcEFF1gtWrQI+FyU59iHk2Afl/3791v9+vWzXn/9det///uftWLFCuuUU06xunbtGvA8zZo1s+6///6Az0VqamqFvOZw/KyMGjXKfBbs7/e+ffsCnofPSsUfl4LnW3PmzLEiIiLM35Rw/ayEXJCkB1f/0H///fd593344YfmQP71119H3N5/olAwSCrN8z799NNWrVq1rMzMzLx1brvtNqtNmzZWOCvPMdE/XvoBXbBgQd59v/76q3ke/UNWlF27dplt5s+ff8TjCWePi95euHBhsX1PmjTJat++fcB9l1xyiQlyw1lFfVbUuHHjrN69e+fd5rOST0+Ux48fn3dbA8VGjRqZL9GKMnz4cOvcc88NuO/UU0+1rrvuOtPOzc21GjRoYD3yyCMBxy02NtZ8mRaMv13hINjHpSjfffedOQ5btmwJOPHTL1JRMcdEg6TBgwcX2yefFXd8VgYPHmz16dMn4L5w+6yE3HC7FStWmNRrt27d8u7TYQ2RkZHy7bffOvq8us6ZZ54pHo8nb50BAwbI+vXr5e+//5ZwVZ5jsmrVKjMUQtfz0zRw06ZNzfMVZf78+ZKQkCAXXXRRocf0IsM6zOXss8+WZcuWBeV1hTqnj4sO/6pTp46ccsopMmfOHDPcyN63/Tn8n5Xijm24qKjPikpJSZHatWsXuj/cPytZWVnmPbW/n/r+6+3i3s8j/Txv3rzZDFu0r5OUlGSGwPjXcepvV1XhxHEp7nOhQ4T0WNjpkCEdztq5c2czvCgnJ0fCnZPHRIf/1qtXT9q0aSP/+Mc/ZO/evQHPwWelcj8rOpz7/fffN8McCwqnz0q0hBj9Q6QfLLvo6GhzMnA0Y+tL87z6f4sWLQLWqV+/ft5jtWrVknBUnmOi92uwWfAPlb6fxW3z/PPPy2WXXWbG+/vpyd7s2bPNL9PMzEx57rnnzNwz/UWq82HCmZPH5f7775c+ffqYoPWTTz6RcePGmfHi//znP/Oex//ZsD/HgQMH5NChQwHHMJxU1Gdl+fLl8vrrr5s/cn58Vnz27NkjXq+3yJ/P//3vf0VuU9zPs/1vg/++ktZx4m9XVeHEcSlqbp/OUdL5ezrXxU9/b+lnQI+FfnYmT54s27dvl8cee0zCmVPHROcfDR061JxPbdq0Se644w4ZOHCgOWGPioris+KCz8oLL7wg1atXN8fJLtw+K64Jkm6//XZ5+OGHS1zn119/rbD9gbuOif7y1L5efPHFgPv1Wyhd/E4//XTzS/fxxx8vtG5V4Ybjcvfdd+e19duktLQ0842SP0gKN244Jn5r1qyRwYMHy7333iv9+/cP688K4KfZ2OHDh5uM96xZswIemzBhQl67Y8eO5kuJ6667TqZPn24KzyC4RowYkdfWAgL6nh933HEmu9S3b99K3Tf46OiQyy+/3BR5COfPimuCpFtuucVUPClJy5YtpUGDBnmVzfw01aeVUPSx8irN8+r/Bat8+W8fTd9u5eQx0fs1ZaxVBu3fkOv7WdQ2+q23DhPq2rXrEfdbh399/fXXUlW56bj46bCiqVOnmgyF/qIs7rOi395WxSySW47JunXrzEnGmDFj5K677pJw/6wURYeI6rfVRf18lnQMSlrf/7/epxk7+zr6e8u/jhN/u6oKJ45LwQBpy5Yt8vnnnwdkkYr7fabHJjk5OeCLhXDj5DEp+LtR+9q4caP5/cVnpXKPy1dffWWmkbz++utH3Jcq/1mxQox/Qp9WePL7+OOPg1a4oaTn9RduyMrKyltn8uTJFG4oxzHxT0Z/88038+7T6kNFTUY/ePCgVa1atYBKXSXRakZDhgyxwp3Tx8XugQceMJ8Ne+GGDh06BKyjlYko3ODcMdGKm/Xq1bNuvfXWUu9PuH5WdNLz9ddfHzDp+dhjjy1x0vN5550XcF/37t0LFW7417/+FVANtajCDeX92xUOgn1clP69vvDCC00hGS3+UxovvfSSFRkZWajiWjhy4pgU9Oeff5rPwbvvvmtu81mp3OOihTUKVoAM189KyAVJ/tKQnTt3tr799lvr66+/tlq3bh1QGnLr1q0mcNHH/bRM4Y8//mj93//9n/nwffnll+b23r17S/28erKiJcCvvPJKc0KiJRi1zDElwMt3TLSscdOmTa3PP//c/DLUD6wuBT333HNWXFxckVW5tMqKltzdsGGDKWV54403mg/sZ5995uCrDe/jsmjRIvM50vdb33f98kA/B/fcc0+hEuB6wq6V2GbOnEkJcAePiR6LunXrWldccUVAaVb7SSGflXz6u1sDmHnz5pkTsjFjxpjyuTt27DCP6+/422+/PaB8bnR0tAmC9Of53nvvLbIEuD6HnuitXr3aVIYqqgR4Scc+3AX7uGiApKXYGzdubP30008Bnw1/ldrly5ebz4Y+rqWO9aRPP0sjR46spHehah8T/dJz4sSJ5guezZs3m98/Xbp0MZ+FjIyMvOfhs1Lxv8P8X+7o3+5Zs2YV6jMcPyshGSRpYKMfFs0u1KhRw7rqqqvMB89PP3gaCGnWyE9/IPS+gote66W0z6v0+hc9evQwP5watesfRpTvmOjJg5Yp1gyEfij1G23941WQngxedtllRfb78MMPW8cdd5wJomrXrm316tXLnEjCueOipVhPOukk85yJiYnmWhazZ88udL0dfU5dT6/l0LJly4DPWjhz4pgU9/tNy7X68VkJpJlpDTz151O/ldXrsfjptdj021S7N954wzr++OPN+pqVeP/99wMe12zS3Xffbb5I078Pffv2NdeksivN35hwF8zj4v8sFbX4P1+rVq0ypZD1Glf62Wjbtq314IMPBpywh7tgHhO9/mH//v3NybWepOvvKL3Gj//k3o/PSsX/DlP6pb9eY0+TAgWF42clQv+p7CF/AAAAAOAWIXedJAAAAABwEkESAAAAANgQJAEAAACADUESAAAAANgQJAEAAACADUESAAAAANgQJAEAAACADUESAAAAANgQJAEAAACADUESAKDSjR49WiIiIswSExMjLVq0kEmTJklGRkaptl+yZInZdv/+/Y7vKwCg6ouu7B0AAECdc845MnfuXMnOzpZVq1bJqFGjTODz8MMPV+h+aP8aqAEAwheZJACAK8TGxkqDBg2kSZMmcuGFF0q/fv3k008/NY/l5ubK9OnTTYYpPj5eOnXqJG+++aZ5LDk5WXr37m3atWrVMoGVZqZU8+bN5Yknngjo56STTpIpU6bk3db1Z82aJRdccIEkJibKtGnTzOO63osvvmieIykpSUaMGCEHDx7M2077P/HEE83+HHPMMWZ/09LSKuS9AgA4iyAJAOA6a9askeXLl4vH4zG3NUCaP3++zJ49W9auXSs333yzXHHFFbJ06VITVL311ltmvfXr18v27dvlySefLFN/GhQNGTJEfvnlF7n66qvNfZs2bZJ33nlH3nvvPbNoXw899JB5TPu49NJLzbq//vqrGe43dOhQsSwr6O8FAKDiMdwOAOAKGohUq1ZNcnJyJDMzUyIjI+Wpp54y7QcffFA+++wz6d69u1m3ZcuW8vXXX8szzzwjZ511ltSuXdvcX69ePalZs2aZ+77sssvkqquuCrhPs1fz5s2T6tWrm9tXXnmlLF682GSaNEjS/dTAqFmzZuZxzSoBAKoGgiQAgCvokDkd9qZD1h5//HGJjo6WYcOGmcxRenq6nH322QHrZ2VlSefOnYPSd7du3Qrdp8Ps/AGSatiwoezatcu0dbhf3759TWA0YMAA6d+/v1x00UVmuB8AIPQRJAEAXEHnA7Vq1cq058yZYwKR559/Xjp06GDue//99+XYY48tNI+pJJqNKjgETgszFNV3QQWLN+jcJc0uqaioKDNfSocEfvLJJ/Kf//xH7rzzTvn222/NvCkAQGhjThIAwHU0uLnjjjvkrrvuknbt2plg6I8//jBBlH3R+UjKP3fJ6/UGPE/dunXN0Di/AwcOyObNm4Oyjxo0nXHGGXLffffJjz/+aPZh4cKFQXluAEDlIpMEAHCliy++WG699VYz72jixImmWINmcnr06CEpKSmybNkyqVGjhikVrvOCNGjReU2DBg0yFed0flOfPn3MvKLzzz/fzFW65557TBboaGnGSOcn6TA7nQelt3fv3i1t27YNymsHAFQugiQAgCvpnKTrr79eZsyYYbI/mhXSKne///67CXi6dOlisk1Kh+FpRuf22283BRhGjhxpgqPJkyebbc877zxTxnvq1KlBySRpcPbll1+a8uKandIg7dFHH5WBAwcG4ZUDACpbhEW9UgAAAADIw5wkAAAAALAhSAIAAAAAG4IkAAAAALAhSAIAAAAAG4IkAAAAALAhSAIAAAAAG4IkAAAAALAhSAIAAAAAG4IkAAAAALAhSAIAAAAAG4IkAAAAAJB8/x+C8nKvBR5fygAAAABJRU5ErkJggg==" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAIjCAYAAADWYVDIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXPZJREFUeJzt3Ql4FFX28OHTWTohgYQ1LLIquACu4IKggjCAuCCguIwCyl/EXVAYERUUGVzGXQT9RkBm3EBFHXdFRUVcUBFBRUACIpEgkUASkk6663vOTTqphCQkIV2d6vze5ymo7q7qe6srSffpc+8pj2VZlgAAAAAAjKjC/wAAAAAAiiAJAAAAAGwIkgAAAADAhiAJAAAAAGwIkgAAAADAhiAJAAAAAGwIkgAAAADAhiAJAAAAAGwIkgAAAADAhiAJABzWsWNHGTNmjNQlHo9Hpk+fHpLnTk1NNc+/YMGCkDw/ChUUFMjkyZOlXbt2EhUVJeeee264uwQArkWQBAAHQD/4awCwcuXKch/v27evdO/e/YDbeeutt0IWxNQVH3/8sXktg0t0dLSkpKTIeeedJz/99FONnnPbtm3mdVu1apVEunnz5sn9999vXq9nnnlGJkyYUKX9TjjhBPN6z5kzZ7/b+v1+adOmjdn+7bffLncbfb3t5zEhIUG6du0qt912m+zevbvKvzsAEE4xYW0dAOqhdevWmW/6qxskzZ49O2SB0t69eyUmpm68JVx//fVy/PHHS35+vqxevVrmzp1rAqg1a9ZIq1atqh0k3XnnnSZ7d8wxx0gk+/DDD+Wggw6Shx56qMr7rF+/Xr7++mvz+jz77LNy1VVX7beNtLS04u3POOOMCrfVoKthw4aSlZUl7733nsycOdPsv3z5chMcAUBdVjfeEQGgHomLi5O6IBAIiM/nk/j4eLPUFaeccorJhgQddthh5sP7woULzXCyuiA3N1e8Xm+1g91QSk9Pl8aNG1drn//+978mW/fAAw+Y11yHRmoAVNn2xx13nIwePVpuvfVWyc7OlsTExHK31edr3ry5WR8/fryMGDFCXnnlFfniiy+kV69e1Tw6AHBW3fnrDgD1dE6SZkw029GlSxcTrDRr1kz69Okj77//vnlct9UskrIPYwrSD6o33XSTmYuiAZgGFf/617/EsqxS7eo+1157rckAdOvWzWz7zjvvFD9WNkv1+++/y9ixY83wKt22U6dOJljRwEplZGTIzTffLEceeaTJGCQlJZnMwvfff1/rQZPauHHjPv27/PLLpWXLlqZ/ekw65CxIs0+akVKXXXZZ8esWnBtV0dwwHSKpi/15dL8XXnjBDBnTbI0OIdOhY7q/Hrv2RecA6XqLFi3M66JD0+x0/x49ekijRo3Ma6Wv2yOPPLLf49/f+Q3O+froo49k7dq1xcep/d6f5557zgQzZ511liQnJ5vblWUblyxZIhdeeKGMHDnS3H7ttdekqk4//XTz/6ZNm6q8DwCEC5kkAKgFmZmZ8ueff+5zvwZA+6PByaxZs+T//u//zPwQ/fCt8zS+/fZb+dvf/iZXXnmlGTamQdN//vOfUvvqB+VzzjnHfEDWgEaHlL377rsyadIk88G97NArHe60aNEiEyzpt/wVZQ20Pe3Lrl27ZNy4cXL44Yeb53vppZckJyfHZFF+/fVXefXVV+X88883AdT27dvlySeflNNOO01+/PFHE1zVBg0CVJMmTYrv07ZOOumk4sBPAxOdI6Ovgb5+N954oxxxxBFy1113yR133GGOIRhsnXzyyTXqx4wZM8xxawCUl5dn1pUGQ4MGDZITTzzRBC8ffPCBycwccsghxcPX9NxddNFF0r9/f7n33nvNfTrPSoee3XDDDRW2WZXzq8euPxc6nE2HtunPktLjr8yXX34pGzZskPnz55tjGT58uAmgNUNUntdff908vwZJOuxRA0nd/uKLL67S6xcMcvVLAACo8ywAQI3Nnz9fv86vdOnWrVupfTp06GCNHj26+PbRRx9tnXnmmZW2c80115jnKuvVV1819999992l7j/vvPMsj8djbdiwofg+3S4qKspau3btPs+jj02bNq349qhRo8y2X3/99T7bBgIB839ubq7l9/tLPbZp0yYrLi7Ouuuuu0rdp8+vr1VlPvroI7PdvHnzrB07dljbtm2z3nnnHatz587mWL766qvibceOHWu1bt3a+vPPP0s9x4UXXmglJydbOTk55rb2v6K2y56HoNNOO80sZft18MEHFz9vkO6vj9mPVx177LFWjx49im/fcMMNVlJSklVQUGBVR3XOr/a57M9aZa699lqrXbt2xefzvffeM21999135W5/1llnWb179y6+/dRTT1kxMTFWenp6qe3050ifZ926deY86vl/8skn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HQAAAADYECQBblBQoJf1Llx03WmBApHf3yxcdB0AAMjOnTslJSVFUlNTw90VmTt3rpx99tnh7kbEIEgC3CAvT+SsswoXXXdaIE9k2VmFi64DABBmGhAMHjy43Mc+/fRT8Xg8snr16v0+z5gxY8y2usTGxkqnTp1k8uTJkpubu999Z86cKUOHDpWOHTsW37d06VI5+eSTpVGjRtKqVSv5xz/+IQVlvuDUfp1yyikSHx8v7dq1k/vuu6/U4++//74ceuihkpSUJJdeeqn4fL7ixzIzM81jmzdvLrXP5ZdfLt9++6059tpw/fXXS48ePSQuLk6OOeaYKu3zxx9/mP7qcScmJspxxx0nL7/88j6vmb4+CQkJ0rhx432eIyMjw5zbhg0byrHHHivfffddqcevueYaeeCBByTUCJIAAADgOmPHjjXBxNatW/d5bP78+dKzZ0856qijqvRcGmylpaXJr7/+Kg899JA8+eSTMm3atEr3ycnJkaefftr0I+j777+XIUOGmOfTD/cvvviivP7663LLLbcUb7N7924ZOHCgdOjQQb755hu5//77Zfr06fLUU0+ZxwOBgFx88cUyfvx4WbFihaxcubL4MaXPpY/p/nZer9fs9+ijj0ptufzyy+WCCy6o8vajRo2SdevWmWP+4YcfZPjw4TJy5MhSgY4GfOeff75cddVV5T6HBlF79uwxAV/fvn3liiuuKH7siy++kC+//FJuvPFGCTWCJAAAAJSvILvixZ9b9W0L9lZt22o466yzpEWLFrJgwYJS92dlZcnixYtN8KLD4S666CI56KCDTObiyCOPlOeff36f59JsiWY/NKtz7rnnyoABA0wAVpm33nrL7HfSSScV36dBkQZmd9xxh3Tu3FlOO+00kyWaPXu2+eCvnn32WRMozJs3T7p16yYXXnihydo8+OCD5vE///zTLFdffbV5/JxzzpGffvrJPPb555/L119/LTfccEO5fdIMjAYoe/eWeb1r4NFHHzVZm4MPPrjK+2j/rrvuOjnhhBPMfrfddpvJFmkwGHTnnXfKhAkTzLkojx6rviaaLRs3blzxsefn55vgUIcVRkdHS6gRJAEAAKB8ixpWvHw6ovS2L6dUvO3HZ5Te9rWO5W9XDTExMSZzoUGSZVnF92uA5Pf7TXCkQ+Z0yNibb74pa9asMR+6dTjYV199VeHz6nb6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QvN8cP85LSszM1OaNm1ay0dQv/l8PnM+7OdCz53eruhc6P327dWgQYOKt9+0aZO5KLd9Gx3+oUNKKju/qJvns6LfRR2epb/7cOc5DQQCcumll8qkSZOkW7duITwChPp86rl888035dBDDzX3p6SkmL+3r776aoiPBrWBT6ww9IOT/vLaxcTEmA+++lhF+3i93n3ejFu2bFm8T15enpm/cv/995sP2nD/OS3r888/lxdffFHGjRtXi73Hn3/+KX6/37z2VT0Xen9l2wf/r85zou6ez/LmE+ocJf2bq/MQ4c5zeu+995q/1ddff32Ieg6nzmd6erqZB3zPPffI4MGD5b333pNhw4bJ8OHDZdmyZSE8GtQGgqQId8stt5hvFStbfv7555C1P2XKFDOx/5JLLglZG/VNuM+p3Zo1a2To0KEybdo0GThwoCNtAtiXZoBHjhxpCnPMmTMn3N1BDWkmQwvhLFiwwPwth7tpJknp++SECRPkmGOOMe/hZ511lsydOzfc3cN+xOxvA7jbTTfdJGPGjKl0m4MPPlhatWplvvGwKygoMNXR9LHy6P2antZKdfbMg1ZCC+7z4Ycfyg8//CAvvfSSua1v4Kp58+YydepUufPOOw/4GOubcJ9T+zDK/v37mwzSbbfddkDHhH3p70h0dPQ+1SLLOxdBen9l2wf/1/u0up19G33zhrvOZ9kAafPmzeZvLlkk957TTz/91Pzdto+80OyG/t3XCnepqakhORaE5nzqc2pWsGvXrqW20S+PP/vss1o/BtQuMkkRrkWLFmZOSWWLDq/q1auX+WCs32IF6Zutfgui42fL06NHD4mNjZWlS5cW37du3TpT1lKfT7388sumZPSqVavM8u9//7v4jUDLTMN951StXbtW+vXrJ6NHj5aZM2eG+IjrJz2Hej7s50LPnd62nws7vd++vXr//feLt+/UqZN587Zvs3v3bjNHraLnRN09n/YAScu4f/DBB6Z0P9x7TnUu0urVq4vfM3XR0u46P+ndd98N8RHVb6E4n/qcWu5b30ftfvnlF+nQoUNIjgO1KGQlIeDKctHHHnus9eWXX1qfffaZ1aVLl1LlorXazmGHHWYet5eLbt++vfXhhx+actG9evUyS0U++ugjqtu5/JxqadMWLVqYaj1paWnFS3p6uuPHVx/K0WrluQULFphqhePGjTPlaP/44w/z+KWXXmrdcsstpcrRxsTEWP/6179MVcJp06aVWwJcn0NL0K5evdqU5qcEuDvPp8/nMyXc27Zta61atarU72NeXl7YjrM+CcXvaFlUt3P3+dRS7nrfU089Za1fv95cLkPLhutlOVC3ESSh2M6dO80H6IYNG1pJSUnWZZddZu3Zs6f48U2bNpkARwOdIP1gpeWfmzRpYiUkJFjDhg0zb9AVIUhy/znVNwHdp+yib+SoffqGqkGrXrtDy9PqNa+CtKz+6NGjS22/aNEi69BDDzXbd+vWzXrzzTdLPa5lwG+//XarZcuW5sNA//79rXXr1jl2PPVdbZ7P4O9veYv9dxru+h0tiyDJ/edTry+o1ymMj483177S69Sh7vPoP7WZmQIAAAAAN2NOEgAAAADYECQBAAAAgA1BEgAAAADYECQBAAAAgA1BEgAAAADYECQBAAAAgA1BEgAAAADYECQBAAAAgA1BEgAAAADYECQBAMJuzJgx4vF4zBIbGyudOnWSyZMnS25ubpX2//jjj82+u3btCnlfAQCRLybcHQAAQA0ePFjmz58v+fn58s0338jo0aNN4HPvvfc62g9tXwM1AED9RSYJAFAnxMXFSatWraRdu3Zy7rnnyoABA+T99983jwUCAZk1a5bJMDVo0ECOPvpoeemll8xjqamp0q9fP7PepEkTE1hpZkp17NhRHn744VLtHHPMMTJ9+vTi27r9nDlz5JxzzpHExESZOXOmeVy3+89//mOeIzk5WS688ELZs2dP8X7a/pFHHmn606xZM9Pf7OxsR14rAEBoESQBAOqcNWvWyOeffy5er9fc1gBp4cKFMnfuXFm7dq1MmDBBLrnkElm2bJkJql5++WWz3bp16yQtLU0eeeSRarWnQdGwYcPkhx9+kMsvv9zct3HjRnn11VfljTfeMIu2dc8995jHtI2LLrrIbPvTTz+Z4X7Dhw8Xy7Jq/bUAADiP4XYAgDpBA5GGDRtKQUGB5OXlSVRUlDz++ONm/Z///Kd88MEH0qtXL7PtwQcfLJ999pk8+eSTctppp0nTpk3N/SkpKdK4ceNqt33xxRfLZZddVuo+zV4tWLBAGjVqZG5feumlsnTpUpNp0iBJ+6mBUYcOHczjmlUCAEQGgiQAQJ2gQ+Z02JsOWXvooYckJiZGRowYYTJHOTk58re//a3U9j6fT4499thaabtnz5773KfD7IIBkmrdurWkp6ebdR3u179/fxMYDRo0SAYOHCjnnXeeGe4HAHA/giQAQJ2g84E6d+5s1ufNm2cCkaefflq6d+9u7nvzzTfloIMO2mceU2U0G1V2CJwWZiiv7bLKFm/QuUuaXVLR0dFmvpQOCXzvvffksccek6lTp8qXX35p5k0BANyNOUkAgDpHg5tbb71VbrvtNunatasJhrZs2WKCKPui85FUcO6S3+8v9TwtWrQwQ+OCdu/eLZs2baqVPmrQ1Lt3b7nzzjvlu+++M31YsmRJrTw3ACC8yCQBAOqk888/XyZNmmTmHd18882mWINmcvr06SOZmZmyfPlySUpKMqXCdV6QBi06r2nIkCGm4pzObzr99NPNvKKzzz7bzFW64447TBboQGnGSOcn6TA7nQelt3fs2CFHHHFErRw7ACC8CJIAAHWSzkm69tpr5b777jPZH80KaZW7X3/91QQ8xx13nMk2KR2GpxmdW265xRRgGDVqlAmOpkyZYvY966yzTBnvGTNm1EomSYOzTz75xJQX1+yUBmkPPPCAnHHGGbVw5ACAcPNY1CsFAAAAgGLMSQIAAAAAG4IkAAAAALAhSAIAAAAAG4IkAAAAALAhSAIAAAAAG4IkAAAAALAhSAIAAAAAG4IkAAAAALAhSAIAAAAAG4IkAAAAALAhSAIAAAAAKfH/AU4UTWXEIeaiAAAAAElFTkSuQmCC" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 4 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-15T23:38:25.798987Z", + "start_time": "2025-02-15T23:38:25.794344Z" + } + }, + "cell_type": "code", + "source": [ + "value = portfolio.value_at_risk(0.01, 1_000_000.)\n", + "value" + ], + "id": "aa1bd5ee47522592", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1001159.1538127009\n" + ] + }, + { + "data": { + "text/plain": [ + "-1159.1538127008826" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 5 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-15T23:38:26.675900Z", + "start_time": "2025-02-15T23:38:26.593243Z" + } + }, + "cell_type": "code", + "source": [ + "# Calculate n Day VaR\n", + "var_array = []\n", + "num_days = int(15)\n", + "for x in range(1, num_days+1):\n", + " var_array.append(np.round(value * np.sqrt(x),2))\n", + " print(str(x) + \" day VaR @ 95% confidence: \" + str(np.round(value * np.sqrt(x),2)))\n", + "\n", + "# Build plot\n", + "plt.xlabel(\"Day #\")\n", + "plt.ylabel(\"Max portfolio loss (USD)\")\n", + "plt.title(\"Max portfolio loss (VaR) over 15-day period\")\n", + "plt.plot(var_array, \"r\")" + ], + "id": "ddeb6ada3ab526b5", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 day VaR @ 95% confidence: -1159.15\n", + "2 day VaR @ 95% confidence: -1639.29\n", + "3 day VaR @ 95% confidence: -2007.71\n", + "4 day VaR @ 95% confidence: -2318.31\n", + "5 day VaR @ 95% confidence: -2591.95\n", + "6 day VaR @ 95% confidence: -2839.34\n", + "7 day VaR @ 95% confidence: -3066.83\n", + "8 day VaR @ 95% confidence: -3278.58\n", + "9 day VaR @ 95% confidence: -3477.46\n", + "10 day VaR @ 95% confidence: -3665.57\n", + "11 day VaR @ 95% confidence: -3844.48\n", + "12 day VaR @ 95% confidence: -4015.43\n", + "13 day VaR @ 95% confidence: -4179.39\n", + "14 day VaR @ 95% confidence: -4337.16\n", + "15 day VaR @ 95% confidence: -4489.38\n" + ] + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x15345cd10>]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlAAAAHHCAYAAABwaWYjAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAaVRJREFUeJzt3Qd4U9UbBvCX1bI3tCB7T2UjQxEBEVFBERRlyRZFEARBWQIyRREEAZXhAhmCg730L1v23hsEVKAMkdX7f95zTUxLKQ20vU3y/p7nQnJzk5ykGV/O+c53ElmWZUFEREREYixxzA8VEREREVIAJSIiIuIlBVAiIiIiXlIAJSIiIuIlBVAiIiIiXlIAJSIiIuIlBVAiIiIiXlIAJSIiIuIlBVAiIiIiXlIAJZIADR8+HPny5UOSJElQqlQpr677yCOPmM3l8OHDSJQoESZPnhwrbYvt24ttTzzxBNq0aYOEYty4cciVKxeuXr3qdFP8Dl+DfC3yNenP8uTJgxYtWsTa7f3888/meeP/cvcUQEm8f9hxW7FixS2Xc1WhnDlzmsuffPJJ+LOdO3eiX79+UX7wL1q0CN27d0eVKlUwadIkDBo0yJE2+qKVK1ea5++tt94y519//XXzetq/f/9tr/POO++YY7Zu3Rrj+3G9jl1b2rRpUa1aNcydO/eWY/nFd+3aNYwfPx7+5r333sPTTz+NkJAQ8zzwNR0V7o/8nHFLnjx5vLdZJLYkjbVbEokhfmh+8803qFq1aoT9v/zyC44fP47g4GD4OwZQ7777rukp4q9LT8uWLUPixInx+eefIygo6J7vK3fu3Lhy5QqSJUuGQOi5q1GjBgoUKGDOv/TSSxg9erR5vfXp0yfK60ydOhUlS5bE/fff79V91apVC82aNTOB/5EjR/DJJ5/gqaeewvz581G7du0Ir/fmzZvjgw8+QMeOHU3g4C969eqF0NBQlC5dGgsXLrzj8XyOUqdO7T7PHla5sz179pjPBElYFECJI0MsM2bMwKhRo5A06X8vQX7JlS1bFn/++Sf81T///HPHoOjMmTNIkSJFrARPFCi/9Pm8sQeIQ2YuFStWNMEUg6SoAqjVq1fj0KFDGDJkiNf3V6hQITRp0sR9vkGDBihWrBg++uijCAEUNWrUCMOGDcPy5cvx6KOPwldcvnwZqVKluu3lfO74A4Dv2SxZstzx9p577jlkzpw5llvpnxiY8/OCnwWB8KPSFymklXjXuHFj/PXXX1i8eLF7H4c4Zs6ciRdffDHK67z//vuoXLkyMmXKZD5QGGjxeE8c7mKwMHHixAj7OQTG/fPmzYu2Xfwi4NAhh4CYd8Sgg1+I33333S3HHjx4EA0bNkTGjBmRMmVKPPjgg7cM37jyDKZNm2Z+qd93333mWAaOvC5Vr17dPZzhOp6Pg19crv2uXKMbN25gwIAByJ8/v/lAZXvffvvtO+bW3C5niT1dDz30kPmCTJ8+PerVq4ddu3bhbsXk9i5evIjOnTubtvMxZM2a1fTkbNy40X3Mvn37TDDCng3+DXLkyIEXXngBYWFh0d4/n38+RzVr1oywn71Qu3fvjnAfnkE7nxu+JvkaZJDF11a6dOnM4+DjYdATE0WLFjXBwYEDB265jLfJ18r3338fo9viDwxeh6913iYDtRMnTkR4P7Dd7PmKrGfPnib4PnfunHvf2rVr8fjjj5vHxdcghxs53BnVMBt7R/k+zJAhwy29xJFF7j2NSVBw4cIF87+3duzYYYJPPid8TQwcOBDh4eG3HMfnuG7dusiePbt5jfH9wvfNzZs33cf07dvX9Mj+8ccft1y/bdu25vXL4OV2OCzLnjR+DjBY5muF99e/f/9bHhvbOHLkSBQvXty8njnc2a5duwh/H8/PH/bklStXzjxO17BvVDlQMfkMIvbq169f37SR77c33nhD+XixxRKJJ5MmTeIni/Xbb79ZlStXtpo2beq+bM6cOVbixImtEydOWLlz57bq1q0b4bo5cuSwOnToYH388cfWBx98YFWoUMHc1k8//RThuCeffNJKly6ddfToUXN+69atVlBQkNWqVas7to/3W6hQISt9+vRWjx49zP2ULFnStGvRokXu406dOmWFhIRYadKksd555x1z3AMPPGCO++6779zHLV++3LSxWLFiVqlSpcxxgwcPtnbs2GG9/vrr5rK3337b+vLLL83G2+X/Dz30kBUcHOzef+DAAXN7zZs3N9d57rnnrDFjxljNmjUz5+vXrx/hcVSrVs1sLocOHTLH8fl3Wbx4sZU0aVLzeIcNG2a9++67VubMma0MGTKY46NzL7f34osvmr9Hly5drM8++8waOnSo9dRTT1lfffWVufzq1atW3rx5rezZs1sDBw40x/C2ypcvbx0+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lCpVCokSJcJmTln1sHXrVjz00ENInjw5cubMiWHDht1y/RkzZqBIkSLmmJIlS2Ie11fyYFkW+vTpg2zZsiFFihSoWbMm9qkom4iIf8meHRg/HtixA3juOTsfiqUQmGj+xhvAn3863UJJ4HwugOrevTuy84UfyYULF/DYY48hd+7c2LBhA4YPH45+/fphAlfz/teqVavQuHFjtGrVCps2bUL9+vXNtn37dvcxDLpGjRqFcePGYe3atUiVKhVq166NfzT9VUTE/xQubBffXLcOqF4duHbNLs7J0gcDBgCXLjndQkmoLB8yb948q0iRItaOHTs4dcLatGmT+7KxY8daGTJksK5evere99Zbb1mFCxd2n2/UqJFVt27dCLdZsWJFq127duZ0eHi4FRoaag0fPtx9+fnz563g4GBr6tSpMW5nWFiYaR//FxERHxEeblkLFlhWqVLsj7K3kBDLGjPGsq5dc7p1Eg+8+f72mR6o06dPo02bNvjyyy+RMmXKWy5fvXo1Hn74YQQFBbn3sedoz549OHfunPsYDsl54jHcT4cOHcKpU6ciHJMuXTpUrFjRfYyIiPhx6YPatYENG4BvvrF7oU6fBl591a4nNXUqEB7udCslgfCJAIp5SS1atED79u1Rrly5KI9h4BMSEhJhn+s8L4vuGM/LPa8X1TG3y8viEKLnJiIiPipxYqBxY2DXLuDjj4GsWYEDB4AXXwT4HbRwoWpIibMBVI8ePUwyeHTb7t27MXr0aFy8eBE9OfU0ARo8eLDpqXJtTGAXEREfxxEN9j4xeOrfH0iTBti0CXj8caBGDWDlSqdbKIEaQHXt2hW7du2KdsuXLx+WLVtmhtCCg4ORNGlSFOACkeAPgXJozmmnAEJDQ80wnyfXeV4W3TGel3teL6pjosLALiwszL0dY7VbERHxD6lTA71724FU5852YLV8uV2Is04dYP16p1sogRZAZcmSxZQUiG5jThNnxW3ZssWULeDmKj3w7bff4r333jOnK1WqhP/973+4fv26+/YXL16MwoULIwMrz/57zNKlSyO0gcdwP+XNm9cESp7HcDiOs/Fcx0SFgV3atGkjbCIi4meyZAE+/NCuat66tV1DasECoHz5/5aNkcBh+aBDhw7dMguPs+VCQkKspk2bWtu3b7emTZtmpUyZ0ho/frz7mJUrV1pJkya13n//fWvXrl1W3759rWTJklnbtm1zHzNkyBArffr01vfff29t3brVqlevnpU3b17rypUrMW6fZuGJiASAffssq2lTy0qc+L9Ze40aWdbOnU63TO6SX87CuxPmHi1atMjMpCtbtqwZHmRBzLasNPuvypUr45tvvjG1oR544AHMnDkTc+bMQYkSJSLUmerYsaO5Xvny5XHp0iUsWLDAFN4UERFxYzoJi2+ylmCjRva+6dMBfqc0a2YP+YnfSsQoyulG+BsO+zGgYz6UhvNERALEli1A377A99/b5znE9/LLdv5UrlxOt05i+fvbb3qgREREHMX19ObMsauac6bezZvAZ58BBQsCr70GnDzpdAslFimAEhERiU1MKp8/H1ix4r/lYcaMAfLn5/Rz4MwZp1sosUABlIiISFyoUgVYtgzgzO7KlQGuqfrBB3aF87ffBs6edbqFcg8UQImIiMSlRx+1e6PYK1W2LHD5Misws3YO8O67QFiY0y2Uu6AASkREJD7W2WNe1G+/2XlSJUsyYxno188OpIYMsQMr8RkKoEREROIzkKpXD9i8mdWggSJFAC54z6XKGEixUOeVK063UmJAAZSIiIgTCxazdhRrSLGWFPOi/vgD6NLFri81dixXqne6lRINBVAiIiJOYa2opk2B3buBTz8FuBg9yx1wEePChYHPPwc8liiThEMBlIiIiNOSJbPX19u3D/j4YyBbNuDIEXtfsWLAV1/ZdaUkwVAAJSIiklAEB9u9T1wGZsQIIHNmYP9+u5eKieczZgDh4U63UhRAiYiIJEApUtj5UIcOAYMGARkyALt22XlTZcrYy8VoJTZHKYASERFJqFKntmfoMZDiOntp0thr7tWvbwdSs2erR8ohCqBEREQSunTp7JpRDKR69ABSpbJLITz7LFC6NDBzpgKpeKYASkRExFdkymRXMT982F4Ohj1SW7cCDRsC999v15ZSsnm8UAAlIiLia5hc/t57diDVuzeQNi2wYwfwwgt2svk33yiQimMKoERERHxVxoxA//52yQMO8aVPbyebv/SSXf7gyy+BGzecbqVfUgAlIiLi6xg4McmcPVIDBtiz9vbuBZo1A4oWBSZPViAVyxRAiYiI+FOyea9ediDFXCnmTLGO1Msvq7J5LFMAJSIi4m+YE8XZegykhg0DsmQBDh60K5sXKmQvG3PtmtOt9GkKoERERPy5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" }, "metadata": {}, "output_type": "display_data" @@ -390,7 +244,7 @@ "outputs": [], "execution_count": null, "source": "", - "id": "ddeb6ada3ab526b5" + "id": "17c360afc5728ddc" } ], "metadata": { diff --git a/pyfinlib/Cargo.toml b/pyfinlib/Cargo.toml index 41c9885..b91ba97 100644 --- a/pyfinlib/Cargo.toml +++ b/pyfinlib/Cargo.toml @@ -24,4 +24,5 @@ crate-type = ["cdylib"] [dependencies] finlib = { path = "../finlib", features = ["py"] } pyo3 = { workspace = true } -pyo3-log = { workspace = true } \ No newline at end of file +pyo3-log = { workspace = true } +log = "0.4.25" \ No newline at end of file diff --git a/pyfinlib/src/lib.rs b/pyfinlib/src/lib.rs index 9f9f586..3f2346c 100644 --- a/pyfinlib/src/lib.rs +++ b/pyfinlib/src/lib.rs @@ -12,7 +12,6 @@ mod pyfinlib { #[pymodule_init] fn init(m: &Bound<'_, PyModule>) -> PyResult<()> { pyo3_log::init(); - Ok(()) } @@ -41,7 +40,7 @@ mod pyfinlib { #[pyfunction] fn varcovar(values: Vec<f64>, confidence: f64) -> PyResult<f64> { - Ok(finlib::risk::var::varcovar::value_at_risk(&values, confidence)) + Ok(finlib::risk::var::varcovar::value_at_risk_percent(&values, confidence)) } } }