exness-data-preprocess 0.1.0__tar.gz → 0.2.0__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 (90) hide show
  1. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.gitignore +1 -0
  2. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/CLAUDE.md +147 -20
  3. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/PKG-INFO +2 -1
  4. exness_data_preprocess-0.2.0/PYDANTIC_REFACTORING_PLAN.md +946 -0
  5. exness_data_preprocess-0.2.0/PYDANTIC_REFACTORING_STATUS.md +203 -0
  6. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/pyproject.toml +2 -1
  7. exness_data_preprocess-0.2.0/src/exness_data_preprocess/__init__.py +89 -0
  8. exness_data_preprocess-0.2.0/src/exness_data_preprocess/models.py +318 -0
  9. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/src/exness_data_preprocess/processor.py +53 -45
  10. exness_data_preprocess-0.2.0/tests/PYDANTIC_TEST_STRATEGY.md +430 -0
  11. exness_data_preprocess-0.2.0/tests/archive/E2E_TESTING_PLAN_v1.0.0.md +174 -0
  12. exness_data_preprocess-0.2.0/tests/conftest.py +86 -0
  13. exness_data_preprocess-0.2.0/tests/test_functional_regression.py +338 -0
  14. exness_data_preprocess-0.2.0/tests/test_models.py +333 -0
  15. exness_data_preprocess-0.2.0/tests/test_processor_pydantic.py +222 -0
  16. exness_data_preprocess-0.2.0/tests/test_types.py +236 -0
  17. exness_data_preprocess-0.1.0/src/exness_data_preprocess/__init__.py +0 -51
  18. exness_data_preprocess-0.1.0/src/exness_data_preprocess/api.py +0 -216
  19. exness_data_preprocess-0.1.0/tests/conftest.py +0 -90
  20. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.cz.toml +0 -0
  21. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.github/workflows/ci.yml +0 -0
  22. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
  23. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.github/workflows/publish.yml +0 -0
  24. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.pre-commit-config.yaml +0 -0
  25. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/AUTHORS.md +0 -0
  26. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/CHANGELOG.md +0 -0
  27. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/CONTRIBUTING.md +0 -0
  28. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/GITHUB_PYPI_SETUP.md +0 -0
  29. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/LICENSE +0 -0
  30. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/README.md +0 -0
  31. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/cliff.toml +0 -0
  32. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/DATABASE_SCHEMA.md +0 -0
  33. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/EXNESS_DATA_SOURCES.md +0 -0
  34. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/README.md +0 -0
  35. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/UNIFIED_DUCKDB_PLAN_v2.md +0 -0
  36. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/archive/UNIFIED_DUCKDB_PLAN_v1.0.0_LEGACY.md +0 -0
  37. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/implementation-plan.yaml +0 -0
  38. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/planning-index.yaml +0 -0
  39. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/compression-benchmarks/README.md +0 -0
  40. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/compression-benchmarks/test_all_compression_methods.py +0 -0
  41. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/compression-benchmarks/test_delta_encoding_properly.py +0 -0
  42. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/compression-benchmarks/test_parquet_compression_methods.py +0 -0
  43. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/01-methodology.md +0 -0
  44. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/02-mode-truncated-analysis.md +0 -0
  45. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/03-hurdle-model-analysis.md +0 -0
  46. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/04-temporal-patterns.md +0 -0
  47. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/05-final-recommendations.md +0 -0
  48. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/README.md +0 -0
  49. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/scripts/reproduction_guide.md +0 -0
  50. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/hurdle-model/hurdle_decomposition.png +0 -0
  51. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/cv_mode_comparison.png +0 -0
  52. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/distribution_overlay.png +0 -0
  53. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/signal_quality_comparison.png +0 -0
  54. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/variance_decomposition.png +0 -0
  55. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/concentration_curve.png +0 -0
  56. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/percentile_analysis.png +0 -0
  57. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/01-methodology.md +0 -0
  58. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/02-baseline-sep2024.md +0 -0
  59. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/03-multiperiod-validation.md +0 -0
  60. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/04-discoveries-and-plan-evolution.md +0 -0
  61. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/README.md +0 -0
  62. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/findings/baseline-sep2024-comprehensive-summary.md +0 -0
  63. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/findings/phase2-mean-reversion-report.md +0 -0
  64. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/findings/phase3-volatility-model-report.md +0 -0
  65. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/findings/phase4-5-statistical-tests-survivorship-report.md +0 -0
  66. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/01_mean_reversion_analysis.py +0 -0
  67. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/02_volatility_model_simple.py +0 -0
  68. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/03_liquidity_crisis_detection.py +0 -0
  69. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/04_regime_detection_analysis.py +0 -0
  70. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase1_data_validation.py +0 -0
  71. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase2_mean_reversion.py +0 -0
  72. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase3_volatility_model.py +0 -0
  73. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase4_statistical_tests.py +0 -0
  74. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase5_survivorship_bias.py +0 -0
  75. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase5_survivorship_bias_v1.0.1.py +0 -0
  76. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6a_interval_analysis.py +0 -0
  77. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6b_price_clustering.py +0 -0
  78. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6c_combined_pattern.py +0 -0
  79. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/reproduction_guide.md +0 -0
  80. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/diagnostic_burst_decay.py +0 -0
  81. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/generate_interactive_dashboard.py +0 -0
  82. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/generate_lightweight_dashboard.py +0 -0
  83. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/prepare_visualization_data.py +0 -0
  84. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/examples/add_schema_comments.py +0 -0
  85. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/examples/basic_usage.py +0 -0
  86. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/examples/batch_processing.py +0 -0
  87. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/src/exness_data_preprocess/cli.py +0 -0
  88. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/tests/README.md +0 -0
  89. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/tests/__init__.py +0 -0
  90. {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/tests/test_basic.py +0 -0
@@ -98,3 +98,4 @@ uv.lock
98
98
 
99
99
  # Pre-commit
100
100
  # .pre-commit-config.yaml should be tracked, not ignored
101
+ .token-info.md
@@ -1,4 +1,6 @@
1
- # exness-data-preprocess - Project Memory
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
2
4
 
3
5
  **Architecture**: Professional forex tick data preprocessing with unified single-file DuckDB storage
4
6
 
@@ -6,6 +8,146 @@
6
8
 
7
9
  ---
8
10
 
11
+ ## Development Commands
12
+
13
+ ### Setup
14
+ ```bash
15
+ # Install with development dependencies
16
+ uv sync --dev
17
+
18
+ # Or with pip
19
+ pip install -e ".[dev]"
20
+ ```
21
+
22
+ ### Testing
23
+ ```bash
24
+ # Run all tests
25
+ uv run pytest
26
+
27
+ # Run with coverage
28
+ uv run pytest --cov=exness_data_preprocess --cov-report=html
29
+
30
+ # Run specific test file
31
+ uv run pytest tests/test_processor.py -v
32
+
33
+ # Run specific test
34
+ uv run pytest tests/test_processor.py::test_compression_ratio -v
35
+ ```
36
+
37
+ ### Code Quality
38
+ ```bash
39
+ # Format code
40
+ uv run ruff format .
41
+
42
+ # Check formatting without changes
43
+ uv run ruff format --check .
44
+
45
+ # Lint and auto-fix
46
+ uv run ruff check --fix .
47
+
48
+ # Lint without changes
49
+ uv run ruff check .
50
+
51
+ # Type checking
52
+ uv run mypy src/
53
+ ```
54
+
55
+ ### Building and Publishing
56
+ ```bash
57
+ # Build package
58
+ uv build
59
+
60
+ # Test installation locally
61
+ uv tool install --editable .
62
+
63
+ # Publish to PyPI (requires PYPI_TOKEN in environment)
64
+ doppler run --project claude-config --config dev -- uv publish --token "$PYPI_TOKEN"
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Codebase Architecture
70
+
71
+ ### Module Structure
72
+
73
+ **Core Components**:
74
+
75
+ 1. **`processor.py`** (`/Users/terryli/eon/exness-data-preprocess/src/exness_data_preprocess/processor.py`) - Main `ExnessDataProcessor` class
76
+ - **Lines 29-899**: Complete processor implementation
77
+ - **Lines 75-113**: `download_exness_zip()` - Downloads monthly ZIP files from ticks.ex2archive.com
78
+ - **Lines 115-232**: `_get_or_create_db()` - Database initialization with schema and COMMENT ON statements
79
+ - **Lines 234-245**: `_load_ticks_from_zip()` - CSV parsing from ZIP files
80
+ - **Lines 247-275**: `_append_ticks_to_db()` - Tick insertion with PRIMARY KEY duplicate prevention
81
+ - **Lines 277-377**: `_discover_missing_months()` - Gap detection for incremental updates
82
+ - **Lines 379-516**: `update_data()` - Main entry point for downloading and updating data
83
+ - **Lines 518-549**: `_regenerate_ohlc()` - Phase7 9-column OHLC generation with LEFT JOIN
84
+ - **Lines 551-603**: `query_ticks()` - Tick queries with date range and SQL filters
85
+ - **Lines 605-706**: `query_ohlc()` - OHLC queries with on-demand resampling (1m/5m/15m/1h/4h/1d)
86
+ - **Lines 708-821**: `add_schema_comments()` / `add_schema_comments_all()` - Retrofit self-documentation
87
+ - **Lines 823-899**: `get_data_coverage()` - Coverage statistics and metadata
88
+
89
+ 2. **`api.py`** (`/Users/terryli/eon/exness-data-preprocess/src/exness_data_preprocess/api.py`) - Simple wrapper functions
90
+ - Convenience functions wrapping `ExnessDataProcessor` methods
91
+ - Legacy v1.0.0 API compatibility layer (to be deprecated)
92
+
93
+ 3. **`cli.py`** (`/Users/terryli/eon/exness-data-preprocess/src/exness_data_preprocess/cli.py`) - Command-line interface
94
+ - Entry point: `exness-preprocess` command
95
+ - Commands for download, query, coverage operations
96
+
97
+ ### Key Design Patterns
98
+
99
+ **Unified Single-File Architecture** (v2.0.0):
100
+ - ONE DuckDB file per instrument (e.g., `eurusd.duckdb`) containing all historical data
101
+ - NO monthly file separation (major change from v1.0.0)
102
+ - Incremental updates with automatic gap detection
103
+ - PRIMARY KEY constraints prevent duplicates during updates
104
+
105
+ **Phase7 9-Column OHLC Schema**:
106
+ - BID-only OHLC from Raw_Spread variant
107
+ - Dual spreads: `raw_spread_avg` and `standard_spread_avg`
108
+ - Dual tick counts: `tick_count_raw_spread` and `tick_count_standard`
109
+ - Generated via LEFT JOIN between Raw_Spread and Standard variants
110
+
111
+ **Self-Documentation**:
112
+ - All tables and columns have embedded `COMMENT ON` statements
113
+ - Queryable via `duckdb_tables()` and `duckdb_columns()` system functions
114
+ - Enables BI tools and IDEs to display inline help
115
+
116
+ **Data Flow**:
117
+ ```
118
+ Exness Repository (monthly ZIPs)
119
+ → Automatic Gap Detection
120
+ → Download Missing Months (Raw_Spread + Standard)
121
+ → DuckDB Storage (PRIMARY KEY prevents duplicates)
122
+ → Phase7 OHLC Generation
123
+ → Query Interface (date ranges, SQL filters, resampling)
124
+ ```
125
+
126
+ ### Database Schema (per instrument)
127
+
128
+ Each `.duckdb` file contains:
129
+
130
+ 1. **`raw_spread_ticks`** table:
131
+ - Columns: `Timestamp` (PK), `Bid`, `Ask`
132
+ - Exness Raw_Spread variant (~98% zero-spreads, execution prices)
133
+ - Primary data source for OHLC construction
134
+
135
+ 2. **`standard_ticks`** table:
136
+ - Columns: `Timestamp` (PK), `Bid`, `Ask`
137
+ - Exness Standard variant (0% zero-spreads, always Bid < Ask)
138
+ - Reference data for spread comparison
139
+
140
+ 3. **`ohlc_1m`** table:
141
+ - Columns: `Timestamp` (PK), `Open`, `High`, `Low`, `Close`, `raw_spread_avg`, `standard_spread_avg`, `tick_count_raw_spread`, `tick_count_standard`
142
+ - Phase7 9-column schema
143
+ - Generated from Raw_Spread BID prices with dual-variant spreads
144
+
145
+ 4. **`metadata`** table:
146
+ - Columns: `key` (PK), `value`, `updated_at`
147
+ - Tracks coverage (earliest_date, latest_date, etc.)
148
+
149
+ ---
150
+
9
151
  ## Quick Links
10
152
 
11
153
  ### Documentation
@@ -22,7 +164,7 @@
22
164
 
23
165
  ### Development
24
166
  - **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines
25
- - **[tests/README.md](tests/README.md)** - Test suite documentation
167
+ - **[tests/README.md](tests/README.md)** - Test suite documentation (v2.0.0 tests needed)
26
168
 
27
169
  ---
28
170
 
@@ -76,7 +218,7 @@
76
218
  - ✅ **Dual tick counts**: Records tick counts from both variants
77
219
  - ✅ **LEFT JOIN methodology**: Raw_Spread primary, Standard reference
78
220
 
79
- **Implementation**: [`src/exness_data_preprocess/processor.py`](src/exness_data_preprocess/processor.py) (lines 453-485)
221
+ **Implementation**: [`src/exness_data_preprocess/processor.py`](src/exness_data_preprocess/processor.py) (lines 518-549)
80
222
 
81
223
  **Specification**: [`docs/research/eurusd-zero-spread-deviations/data/plan/phase7_bid_ohlc_construction_v1.1.0.md`](docs/research/eurusd-zero-spread-deviations/data/plan/phase7_bid_ohlc_construction_v1.1.0.md)
82
224
 
@@ -111,7 +253,7 @@ SELECT table_name, column_name, data_type, comment FROM duckdb_columns();
111
253
  - `add_schema_comments(pair)` - Add comments to single database
112
254
  - `add_schema_comments_all()` - Batch-update all databases
113
255
 
114
- **Implementation**: [`src/exness_data_preprocess/processor.py`](src/exness_data_preprocess/processor.py) (lines 138-215, 698-797)
256
+ **Implementation**: [`src/exness_data_preprocess/processor.py`](src/exness_data_preprocess/processor.py) (lines 138-229, 708-821)
115
257
 
116
258
  **Usage Example**: [`examples/add_schema_comments.py`](examples/add_schema_comments.py)
117
259
 
@@ -161,21 +303,6 @@ SELECT table_name, column_name, data_type, comment FROM duckdb_columns();
161
303
 
162
304
  ---
163
305
 
164
- ## Development Setup
165
-
166
- **Quick Start**:
167
- ```bash
168
- git clone https://github.com/Eon-Labs/exness-data-preprocess.git
169
- cd exness-data-preprocess
170
- uv sync --dev
171
- ```
172
-
173
- **Complete Setup Guide**: [`README.md`](README.md) - Installation, testing, code quality, building
174
-
175
- **Contributing**: [`CONTRIBUTING.md`](CONTRIBUTING.md) - Contribution guidelines and workflow
176
-
177
- ---
178
-
179
306
  ## Current Implementation Status
180
307
 
181
308
  ### v2.0.0 Architecture (✅ Completed 2025-10-12)
@@ -212,7 +339,7 @@ uv sync --dev
212
339
 
213
340
  ## File Locations
214
341
 
215
- **Project Root**: `/Users/terryli/eon/exness-data-preprocess/ `
342
+ **Project Root**: `/Users/terryli/eon/exness-data-preprocess/`
216
343
 
217
344
  **Data Storage** (default): `~/eon/exness-data/`
218
345
  ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: exness-data-preprocess
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Professional Exness forex tick data preprocessing with optimal compression (Parquet Zstd-22) and DuckDB OHLC generation. Provides efficient storage (9% smaller than ZIP) with lossless precision and direct queryability.
5
5
  Project-URL: Homepage, https://github.com/terrylica/exness-data-preprocess
6
6
  Project-URL: Documentation, https://github.com/terrylica/exness-data-preprocess#readme
@@ -33,6 +33,7 @@ Requires-Dist: duckdb>=0.9.0
33
33
  Requires-Dist: httpx>=0.25.0
34
34
  Requires-Dist: pandas>=2.0.0
35
35
  Requires-Dist: pyarrow>=16.0.0
36
+ Requires-Dist: pydantic>=2.0.0
36
37
  Requires-Dist: tqdm>=4.65.0
37
38
  Provides-Extra: dev
38
39
  Requires-Dist: black>=23.0.0; extra == 'dev'