2024-11-16 21:37:24 -08:00
# Bitcoin Price Model Documentation
## Model Overview
A probabilistic price projection model combining log returns analysis, cycle awareness, and Monte Carlo simulation. The model generates projected price ranges with confidence intervals, balancing short-term market dynamics with long-term cyclical patterns.
2024-11-15 02:09:11 -08:00
2024-11-16 21:37:24 -08:00
## Core Design Principles
2024-11-15 02:09:11 -08:00
2024-11-16 21:37:24 -08:00
### 1. Return Analysis
- Uses log returns for better handling of exponential growth
- Combines multiple timeframes for volatility estimation
- Implements adaptive window sizing based on market conditions
- Handles volatility clustering through regime-aware adjustments
2024-11-15 02:09:11 -08:00
2024-11-16 21:37:24 -08:00
### 2. Cycle Integration
2024-11-15 02:09:11 -08:00
- Recognizes Bitcoin's ~4 year (1460 day) halving cycle
2024-11-16 21:37:24 -08:00
- Maps historical returns to cycle positions (0-1 scale)
- Adjusts expectations based on position in cycle
- Handles transitions between cycles with uncertainty scaling
### 3. Market Era Recognition
Three distinct eras with specific characteristics:
- Early (2013-2017): Higher base volatility, conservative trends
- Transition (2017-2020): Futures market introduction period
- Mature (2020+): Institutional participation, reduced base volatility
### 4. Uncertainty Estimation
- Generates both point estimates and confidence intervals
- Adapts uncertainty based on market conditions
- Uses asymmetric volatility response
- Implements dynamic confidence interval calibration
## Architecture
### Key Components
1. **Trend Analysis (`analyze_trends`)**
- Calculates cycle-position-specific returns
- Applies position-aware smoothing
- Handles cycle boundaries
2. **Volatility Estimation (`calculate_volatility`)**
- Adaptive window sizing
- Multi-timeframe integration
- Era-specific scaling
- Regime detection and response
3. **Price Projection (`project_prices`)**
- Monte Carlo simulation engine
- Dynamic uncertainty scaling
- Confidence interval calculation
- Trend integration
4. **Projection Adjustment (`get_projection_adjustments`)**
- Time-varying uncertainty scaling
- Market condition response
- Cycle position awareness
- Minimum uncertainty bounds
# Model Performance & Validation
## Performance Characteristics
### Normal Market Conditions
- MAPE: 30-40% typical
- 95% CI Coverage: ~95%
- 68% CI Coverage: ~73%
- Best performance in mature market periods (2020+)
- Most reliable for 3-6 month horizons
### Stress Periods
- MAPE: 30-60%
- 95% CI Coverage: ~95%
- 68% CI Coverage: ~76%
- Wider but well-calibrated confidence intervals
- Maintains reliability through increased uncertainty
### Key Strengths
1. Consistent confidence interval coverage
2. Rapid adaptation to volatility changes
3. Robust handling of cycle transitions
4. Well-calibrated uncertainty estimates
### Known Limitations
1. Higher error during market structure changes
2. Increased uncertainty in early cycle periods
3. Limited incorporation of external factors
4. May underestimate extreme events
## Validation Framework
### Backtest Configuration
- Minimum training period: 8 years
- Validation period: 2 years
- Rolling window approach
- Separate evaluation of normal/stress periods
### Key Test Periods
1. **Cycle Transitions**
- Pre/post halving periods
- Historical halvings (2016, 2020, 2024)
- Cycle peak/trough transitions
2. **Market Structure Changes**
- Futures introduction (2017)
- Institution adoption (2020-2021)
- Major market events (e.g., COVID crash)
3. **Recent History**
- 2021 bull market
- 2022 drawdown
- 2024 recovery
### Validation Metrics
1. **Accuracy Measures**
- MAPE (Mean Absolute Percentage Error)
- RMSE (Root Mean Square Error)
- Maximum deviation
2. **Calibration Measures**
- Confidence interval coverage
- Uncertainty estimation accuracy
- Regime transition handling
3. **Stability Measures**
- Parameter sensitivity
- Training period dependence
- Regime change response
# Technical Implementation
## Core Functions
### Volatility Calculation
```python
def calculate_volatility ( df , short_window = 30 , medium_window = 90 , long_window = 180 ):
"""
Adaptive volatility calculation combining multiple timeframes.
Features:
- Dynamic window sizing based on market conditions
- Era-specific scaling factors
- Regime-aware adjustments
- Robust error handling and fallbacks
"""
```
Key parameters:
- `short_window` : Fast response (default 30 days)
- `medium_window` : Primary estimate (default 90 days)
- `long_window` : Stability baseline (default 180 days)
Adaptive features:
- Windows shrink in high volatility periods
- Expand during low volatility
- Minimum size constraints for stability
- Weighted combination based on regime
### Cycle Position
```python
def get_cycle_position ( date , halving_dates ):
"""
Calculate position in halving cycle (0 to 1).
0 = halving event
1 = just before next halving
"""
```
Position calculation:
- Linear interpolation between halvings
- Special handling for pre-first-halving
- Extension mechanism for future cycles
- Built-in boundary condition handling
### Price Projection
```python
def project_prices ( df , days_forward = 365 , simulations = 1000 ,
confidence_levels = [ 0.95 , 0.68 ]):
"""
Generate price projections with confidence intervals.
Core simulation parameters:
- Number of paths: 1000
- Confidence levels: 95 % a nd 68%
- Dynamic uncertainty scaling
"""
```
## Data Requirements
### Input Data
Minimum fields:
- Date
- Close price
- Trading volume (optional)
- High/Low (optional)
Format requirements:
- Daily data preferred
- Sorted chronologically
- No missing dates
- Prices > 0
### Training Data
Minimum requirements:
- 2 years for basic operation
- 8 years recommended
- Must include at least one cycle transition
- Should span multiple market regimes
## Error Handling
### Data Validation
- Missing value detection and interpolation
- Outlier identification
- Zero/negative price handling
- Volume anomaly detection
### Runtime Guards
- Minimum data length checks
- Window size validation
- Numerical stability checks
- Regime transition handling
### Fallback Mechanisms
1. Simple volatility calculation
2. Default uncertainty estimates
3. Conservative parameter sets
4. Standard cycle assumption
## Memory and Performance
### Optimization Features
- Efficient numpy operations
- Vectorized calculations where possible
- Smart data windowing
- Caching of intermediate results
### Resource Usage
Typical requirements for 10-year dataset:
- Memory: ~100MB
- CPU: ~2-5 seconds per projection
- Storage: Negligible
### Parallelization
- Multiprocessing support for backtests
- Independent path simulation
- Multiple period analysis
- Backtest parallelization
# Development History & Evolution
## Major Versions
### Version 1.0 (Initial Implementation)
- Basic log return analysis
- Fixed volatility windows
- Simple cycle position calculation
- Base Monte Carlo simulation
### Version 2.0 (Market Structure)
- Added era-based adjustments
- Improved cycle handling
- Multiple timeframe volatility
- Enhanced Monte Carlo engine
### Version 3.0 (Current)
- Adaptive volatility windows
- Dynamic uncertainty scaling
- Improved regime detection
- Enhanced confidence interval calibration
## Key Improvements
### Volatility Estimation
1. **Fixed → Adaptive Windows**
- Initial: Fixed 30/90/180 day windows
- Current: Dynamic sizing based on regime
- Result: Better regime transition handling
2. **Uncertainty Calibration**
- Initial: Fixed scaling factors
- Current: Market-aware dynamic scaling
- Result: More reliable confidence intervals
3. **Era Recognition**
- Initial: Single model for all periods
- Current: Era-specific adjustments
- Result: Better handling of market evolution
### Simulation Engine
1. **Path Generation**
- Initial: Basic random walks
- Current: Regime-aware path simulation
- Result: More realistic price trajectories
2. **Confidence Intervals**
- Initial: Fixed width
- Current: Dynamic, asymmetric intervals
- Result: Better calibrated uncertainty
## Failed Experiments
### 1. Complex Regime Detection
- Attempted multiple indicator fusion
- Added excessive complexity
- Reduced model stability
- Reverted to simpler approach
### 2. Machine Learning Integration
- Tested neural network components
- Reduced interpretability
- Inconsistent improvements
- Kept traditional statistical approach
### 3. External Factor Integration
- Tried incorporating macro indicators
- Added noise to projections
- Complicated parameter estimation
- Maintained focus on price dynamics
## Recent Improvements (2024)
### Adaptive Volatility Windows
- Implementation: Dynamic window sizing
- Purpose: Better regime handling
- Results:
- Improved 95% CI coverage to ~95%
- Better stress period handling
- More reliable uncertainty estimates
### Performance Metrics
Normal Periods:
- MAPE: 39.9%
- RMSE: $12,007
- 95% CI Coverage: 95.9%
- 68% CI Coverage: 72.5%
Stress Periods:
- MAPE: 32.8%
- RMSE: $12,794
- 95% CI Coverage: 95.2%
- 68% CI Coverage: 76.1%
## Future Directions
### Short Term
1. Fine-tune adaptive parameters
2. Improve transition period handling
3. Enhanced backtest framework
4. Additional regime indicators
### Medium Term
1. Cycle strength indicators
2. Volume analysis integration
3. Improved documentation
4. Performance optimization
### Long Term
1. Real-time adaptation framework
2. Advanced regime detection
3. Market microstructure integration
4. External API integration