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.
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.gitignore +1 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/CLAUDE.md +147 -20
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/PKG-INFO +2 -1
- exness_data_preprocess-0.2.0/PYDANTIC_REFACTORING_PLAN.md +946 -0
- exness_data_preprocess-0.2.0/PYDANTIC_REFACTORING_STATUS.md +203 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/pyproject.toml +2 -1
- exness_data_preprocess-0.2.0/src/exness_data_preprocess/__init__.py +89 -0
- exness_data_preprocess-0.2.0/src/exness_data_preprocess/models.py +318 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/src/exness_data_preprocess/processor.py +53 -45
- exness_data_preprocess-0.2.0/tests/PYDANTIC_TEST_STRATEGY.md +430 -0
- exness_data_preprocess-0.2.0/tests/archive/E2E_TESTING_PLAN_v1.0.0.md +174 -0
- exness_data_preprocess-0.2.0/tests/conftest.py +86 -0
- exness_data_preprocess-0.2.0/tests/test_functional_regression.py +338 -0
- exness_data_preprocess-0.2.0/tests/test_models.py +333 -0
- exness_data_preprocess-0.2.0/tests/test_processor_pydantic.py +222 -0
- exness_data_preprocess-0.2.0/tests/test_types.py +236 -0
- exness_data_preprocess-0.1.0/src/exness_data_preprocess/__init__.py +0 -51
- exness_data_preprocess-0.1.0/src/exness_data_preprocess/api.py +0 -216
- exness_data_preprocess-0.1.0/tests/conftest.py +0 -90
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.cz.toml +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.github/workflows/ci.yml +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.github/workflows/publish.yml +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/.pre-commit-config.yaml +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/AUTHORS.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/CHANGELOG.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/CONTRIBUTING.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/GITHUB_PYPI_SETUP.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/LICENSE +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/README.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/cliff.toml +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/DATABASE_SCHEMA.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/EXNESS_DATA_SOURCES.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/README.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/UNIFIED_DUCKDB_PLAN_v2.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/archive/UNIFIED_DUCKDB_PLAN_v1.0.0_LEGACY.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/implementation-plan.yaml +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/planning-index.yaml +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/compression-benchmarks/README.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/compression-benchmarks/test_all_compression_methods.py +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/compression-benchmarks/test_delta_encoding_properly.py +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/compression-benchmarks/test_parquet_compression_methods.py +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/01-methodology.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/02-mode-truncated-analysis.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/03-hurdle-model-analysis.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/04-temporal-patterns.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/05-final-recommendations.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/README.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/scripts/reproduction_guide.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/concentration_curve.png +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/percentile_analysis.png +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/01-methodology.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/02-baseline-sep2024.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/03-multiperiod-validation.md +0 -0
- {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
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/README.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/docs/research/eurusd-zero-spread-deviations/scripts/reproduction_guide.md +0 -0
- {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
- {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
- {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
- {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
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/examples/add_schema_comments.py +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/examples/basic_usage.py +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/examples/batch_processing.py +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/src/exness_data_preprocess/cli.py +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/tests/README.md +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/tests/__init__.py +0 -0
- {exness_data_preprocess-0.1.0 → exness_data_preprocess-0.2.0}/tests/test_basic.py +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
#
|
|
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
|
|
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-
|
|
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.
|
|
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'
|