voly 0.0.108__tar.gz → 0.0.110__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. {voly-0.0.108/src/voly.egg-info → voly-0.0.110}/PKG-INFO +1 -1
  2. {voly-0.0.108 → voly-0.0.110}/pyproject.toml +2 -2
  3. {voly-0.0.108 → voly-0.0.110}/src/voly/core/hd.py +7 -21
  4. {voly-0.0.108 → voly-0.0.110}/src/voly/formulas.py +8 -6
  5. {voly-0.0.108 → voly-0.0.110/src/voly.egg-info}/PKG-INFO +1 -1
  6. {voly-0.0.108 → voly-0.0.110}/LICENSE +0 -0
  7. {voly-0.0.108 → voly-0.0.110}/README.md +0 -0
  8. {voly-0.0.108 → voly-0.0.110}/setup.cfg +0 -0
  9. {voly-0.0.108 → voly-0.0.110}/setup.py +0 -0
  10. {voly-0.0.108 → voly-0.0.110}/src/voly/__init__.py +0 -0
  11. {voly-0.0.108 → voly-0.0.110}/src/voly/client.py +0 -0
  12. {voly-0.0.108 → voly-0.0.110}/src/voly/core/__init__.py +0 -0
  13. {voly-0.0.108 → voly-0.0.110}/src/voly/core/charts.py +0 -0
  14. {voly-0.0.108 → voly-0.0.110}/src/voly/core/data.py +0 -0
  15. {voly-0.0.108 → voly-0.0.110}/src/voly/core/fit.py +0 -0
  16. {voly-0.0.108 → voly-0.0.110}/src/voly/core/interpolate.py +0 -0
  17. {voly-0.0.108 → voly-0.0.110}/src/voly/core/rnd.py +0 -0
  18. {voly-0.0.108 → voly-0.0.110}/src/voly/exceptions.py +0 -0
  19. {voly-0.0.108 → voly-0.0.110}/src/voly/models.py +0 -0
  20. {voly-0.0.108 → voly-0.0.110}/src/voly/utils/__init__.py +0 -0
  21. {voly-0.0.108 → voly-0.0.110}/src/voly/utils/logger.py +0 -0
  22. {voly-0.0.108 → voly-0.0.110}/src/voly.egg-info/SOURCES.txt +0 -0
  23. {voly-0.0.108 → voly-0.0.110}/src/voly.egg-info/dependency_links.txt +0 -0
  24. {voly-0.0.108 → voly-0.0.110}/src/voly.egg-info/requires.txt +0 -0
  25. {voly-0.0.108 → voly-0.0.110}/src/voly.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voly
3
- Version: 0.0.108
3
+ Version: 0.0.110
4
4
  Summary: Options & volatility research package
5
5
  Author-email: Manu de Cara <manu.de.cara@gmail.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "voly"
7
- version = "0.0.108"
7
+ version = "0.0.110"
8
8
  description = "Options & volatility research package"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -60,7 +60,7 @@ line_length = 100
60
60
  multi_line_output = 3
61
61
 
62
62
  [tool.mypy]
63
- python_version = "0.0.108"
63
+ python_version = "0.0.110"
64
64
  warn_return_any = true
65
65
  warn_unused_configs = true
66
66
  disallow_untyped_defs = true
@@ -48,29 +48,15 @@ def get_historical_data(currency, lookback_days, granularity, exchange_name):
48
48
  else:
49
49
  raise VolyError("lookback_days should be in format '90d', '30d', etc.")
50
50
 
51
- # Convert start date to timestamp
52
51
  from_ts = exchange.parse8601(date_start)
53
-
54
- # Fetch OHLCV data in batches
55
- ohlcv = []
56
- last_timestamp = from_ts
57
-
52
+ ohlcv_list = []
53
+ ohlcv = exchange.fetch_ohlcv(symbol, granularity, since=from_ts, limit=1000)
54
+ ohlcv_list.append(ohlcv)
58
55
  while True:
59
- batch = exchange.fetch_ohlcv(symbol, granularity, since=last_timestamp, limit=1000)
60
-
61
- if len(batch) == 0:
62
- break
63
-
64
- if ohlcv and batch[0][0] == ohlcv[-1][0]:
65
- batch = batch[1:] # Avoid duplicates
66
-
67
- ohlcv.extend(batch)
68
-
69
- # Update timestamp for next batch
70
- last_timestamp = batch[-1][0]
71
-
72
- # Break if we got less than the limit (reached the end)
73
- if len(batch) < 1000:
56
+ from_ts = ohlcv[-1][0]
57
+ new_ohlcv = exchange.fetch_ohlcv(symbol, granularity, since=from_ts, limit=1000)
58
+ ohlcv.extend(new_ohlcv)
59
+ if len(new_ohlcv) != 1000:
74
60
  break
75
61
 
76
62
  # Convert to DataFrame
@@ -368,17 +368,19 @@ def pdf_to_calls(pdf_K, s, K, r, t):
368
368
  # Step 1: Recover the second derivative
369
369
  c2_recovered = pdf_K_normalized / np.exp(r * t)
370
370
 
371
- # Step 2: Double integration using NumPy
372
- # First integration (c2 -> c1)
371
+ # Step 2: Use Simpson's rule for smoother first derivatives recovery
373
372
  c1_recovered = np.zeros_like(K)
374
373
  for i in range(1, len(K)):
375
- c1_recovered[i] = c1_recovered[i - 1] + 0.5 * (c2_recovered[i] + c2_recovered[i - 1]) * (K[i] - K[i - 1])
374
+ h = K[i] - K[i - 1]
375
+ c1_recovered[i] = c1_recovered[i - 1] + (h / 6) * (
376
+ c2_recovered[i - 1] + 4 * c2_recovered[(i - 1 + i) // 2] + c2_recovered[i])
376
377
 
377
- # Second integration (c1 -> c)
378
+ # Step 3: Second integration with Simpson's rule to recover original calls
378
379
  c_recovered_base = np.zeros_like(K)
379
380
  for i in range(1, len(K)):
380
- c_recovered_base[i] = c_recovered_base[i - 1] + 0.5 * (c1_recovered[i] + c1_recovered[i - 1]) * (
381
- K[i] - K[i - 1])
381
+ h = K[i] - K[i - 1]
382
+ c1_mid = (c1_recovered[i - 1] + c1_recovered[i]) / 2 # Midpoint approximation
383
+ c_recovered_base[i] = c_recovered_base[i - 1] + (h / 6) * (c1_recovered[i - 1] + 4 * c1_mid + c1_recovered[i])
382
384
 
383
385
  # Determine the integration constants based on boundary conditions
384
386
  # Find the lowest strike (deep ITM) and highest strike (deep OTM)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voly
3
- Version: 0.0.108
3
+ Version: 0.0.110
4
4
  Summary: Options & volatility research package
5
5
  Author-email: Manu de Cara <manu.de.cara@gmail.com>
6
6
  License: MIT
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes