Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/examples/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from pydantic import BaseModel

EXAMPLE_DIR = Path(__file__).parent
FIXTURES = EXAMPLE_DIR / "fixtures"
OUT_DIR = EXAMPLE_DIR / "output"
ASSET_DIR = EXAMPLE_DIR.parent / "assets" / "examples"

Expand Down
2 changes: 1 addition & 1 deletion docs/examples/pricing_method_comparison.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def _iv_error(
def run_ttm(self) -> None:
for ttm in self.ttms:
ms = self.model.marginal(ttm)
max_log_strike = self.max_moneyness * np.sqrt(ttm)
max_log_strike = self.max_moneyness * ms.std_validated()
log_strikes = ms.option_support(
self.ref_n + 1, max_log_strike=max_log_strike
)
Expand Down
12 changes: 2 additions & 10 deletions docs/examples/spx_vol_surface.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,14 @@
import gzip
import json
from pathlib import Path

from docs.examples._utils import assets_path, print_model
from docs.examples._utils import FIXTURES, assets_path, print_model
from quantflow.data.yahoo import Yahoo
from quantflow.options.calibration import BNS2Calibration
from quantflow.options.calibration.base import ResidualKind
from quantflow.options.pricer import OptionPricer, OptionPricingMethod
from quantflow.sp.bns import BNS, BNS2

FIXTURE = (
Path(__file__).resolve().parents[2]
/ "quantflow_tests"
/ "fixtures"
/ "yahoo_spx.json.gz"
)

chain = json.loads(gzip.decompress(FIXTURE.read_bytes()))
chain = json.loads(gzip.decompress((FIXTURES / "yahoo_spx.json.gz").read_bytes()))
loader = Yahoo.loader_from_chain(chain, exclude_volume=1)
surface = loader.surface()
surface.bs()
Expand Down
4 changes: 2 additions & 2 deletions docs/examples/vol_surface_bns2_calibration.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import json

from docs.examples._utils import assets_path, print_model
from docs.examples._utils import FIXTURES, assets_path, print_model
from quantflow.options.calibration import BNS2Calibration
from quantflow.options.calibration.base import ResidualKind
from quantflow.options.pricer import OptionPricer, OptionPricingMethod
from quantflow.options.surface import VolSurface, VolSurfaceInputs, surface_from_inputs
from quantflow.sp.bns import BNS, BNS2

# Load a saved volatility surface snapshot and build the surface
with open("docs/examples/volsurface.json") as fp:
with open(FIXTURES / "volsurface_btc.json") as fp:
surface: VolSurface = surface_from_inputs(VolSurfaceInputs(**json.load(fp)))

surface.bs()
Expand Down
4 changes: 2 additions & 2 deletions docs/examples/vol_surface_bns_calibration.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import json

from docs.examples._utils import assets_path, print_model
from docs.examples._utils import FIXTURES, assets_path, print_model
from quantflow.options.calibration import BNSCalibration
from quantflow.options.pricer import OptionPricer, OptionPricingMethod
from quantflow.options.surface import VolSurface, VolSurfaceInputs, surface_from_inputs
from quantflow.sp.bns import BNS

# Load a saved volatility surface snapshot and build the surface
with open("docs/examples/volsurface.json") as fp:
with open(FIXTURES / "volsurface_btc.json") as fp:
surface: VolSurface = surface_from_inputs(VolSurfaceInputs(**json.load(fp)))

surface.bs()
Expand Down
4 changes: 2 additions & 2 deletions docs/examples/vol_surface_heston_calibration.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import json

from docs.examples._utils import assets_path, print_model
from docs.examples._utils import FIXTURES, assets_path, print_model
from quantflow.options.calibration import HestonCalibration
from quantflow.options.pricer import OptionPricer, OptionPricingMethod
from quantflow.options.surface import VolSurfaceInputs, surface_from_inputs
from quantflow.sp.heston import Heston

# Load a saved volatility surface snapshot and build the surface
with open("docs/examples/volsurface.json") as fp:
with open(FIXTURES / "volsurface_btc.json") as fp:
surface = surface_from_inputs(VolSurfaceInputs(**json.load(fp)))

surface.bs()
Expand Down
4 changes: 2 additions & 2 deletions docs/examples/vol_surface_hestonj_calibration.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import json

from docs.examples._utils import assets_path, print_model
from docs.examples._utils import FIXTURES, assets_path, print_model
from quantflow.options.calibration import HestonJCalibration
from quantflow.options.calibration.base import ResidualKind
from quantflow.options.pricer import OptionPricer
Expand All @@ -10,7 +10,7 @@
from quantflow.utils.marginal import OptionPricingMethod

# Load a saved volatility surface snapshot and build the surface
with open("docs/examples/volsurface.json") as fp:
with open(FIXTURES / "volsurface_btc.json") as fp:
surface: VolSurface = surface_from_inputs(VolSurfaceInputs(**json.load(fp)))

surface.bs()
Expand Down
3 changes: 2 additions & 1 deletion docs/examples/vol_surface_inputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

import pandas as pd

from docs.examples._utils import FIXTURES
from quantflow.options.inputs import OptionInput
from quantflow.options.surface import VolSurface, VolSurfaceInputs, surface_from_inputs

# Load a saved volatility surface snapshot from JSON
with open("docs/examples/volsurface.json") as fp:
with open(FIXTURES / "volsurface_btc.json") as fp:
surface_inputs = VolSurfaceInputs(**json.load(fp))

# Build the VolSurface from the inputs and calculate implied volatilities
Expand Down
2 changes: 1 addition & 1 deletion quantflow_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@

@pytest.fixture
def vol_surface():
inputs = load_fixture_dict("volsurface.json")
inputs = load_fixture_dict("volsurface_eth.json")
return surface_from_inputs(VolSurfaceInputs(**inputs))
9 changes: 1 addition & 8 deletions quantflow_tests/test_data_deribit.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,15 @@

from __future__ import annotations

import json
from datetime import date, datetime
from pathlib import Path
from typing import Any, AsyncIterator
from unittest.mock import AsyncMock, patch

import pytest

from quantflow.data.deribit import Deribit
from quantflow.utils.dates import as_utc

FIXTURES = Path(__file__).parent / "fixtures"


def load_fixture(name: str) -> list[dict]:
return json.loads((FIXTURES / name).read_text())
from quantflow_tests.utils import load_fixture


@pytest.fixture
Expand Down
5 changes: 2 additions & 3 deletions quantflow_tests/test_data_yahoo.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@
import pytest

from quantflow.data.yahoo import Yahoo

FIXTURES = Path(__file__).parent / "fixtures"
from quantflow_tests.utils import load_fixture_dict


@pytest.fixture
def spx_chain() -> dict:
return json.loads(gzip.decompress((FIXTURES / "yahoo_spx.json.gz").read_bytes()))
return load_fixture_dict("yahoo_spx.json.gz")


@pytest.fixture
Expand Down
2 changes: 1 addition & 1 deletion quantflow_tests/test_surface_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

@pytest.fixture
def vol_surface() -> VolSurface:
inputs = load_fixture_dict("volsurface.json")
inputs = load_fixture_dict("volsurface_eth.json")
return surface_from_inputs(VolSurfaceInputs(**inputs))


Expand Down
7 changes: 4 additions & 3 deletions quantflow_tests/utils.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import gzip
import json
from pathlib import Path
from typing import cast

import numpy as np
import pytest
from aiohttp.client_exceptions import ClientError

from docs.examples._utils import FIXTURES
from quantflow.sp.base import StochasticProcess1D
from quantflow.utils.marginal import Marginal1D
from quantflow.utils.plot import check_plotly
Expand All @@ -16,14 +17,14 @@
except ImportError:
has_plotly = False

FIXTURES = Path(__file__).parent / "fixtures"


def load_fixture(name: str) -> list[dict]:
return json.loads((FIXTURES / name).read_text())


def load_fixture_dict(name: str) -> dict:
if name.endswith(".gz"):
return json.loads(gzip.decompress((FIXTURES / name).read_bytes()))
return json.loads((FIXTURES / name).read_text())


Expand Down
Loading