mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-20 11:38:05 +00:00
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: aider (openrouter/anthropic/claude-sonnet-4) <aider@aider.chat> Co-authored-by: Warp <agent@warp.dev>
196 lines
5.8 KiB
Markdown
196 lines
5.8 KiB
Markdown
# SQRTTRANS: Square Root Transform
|
|
|
|
> "The square root is nature's variance-stabilizing trick—halving the exponent space while preserving monotonicity. When price volatility scales with level, sqrt compresses the noise."
|
|
|
|
The Square Root (SQRT) transformer applies $\sqrt{x}$ to each value in a time series. This variance-stabilizing transformation compresses ranges where volatility scales with magnitude, making it useful for heteroscedastic data where standard deviation increases with price level.
|
|
|
|
## Mathematical Foundation
|
|
|
|
### Core Formula
|
|
|
|
$$
|
|
\text{SQRT}_t = \sqrt{x_t}
|
|
$$
|
|
|
|
where:
|
|
- $x_t$ is the input value at time $t$
|
|
- $x_t \geq 0$ (domain restriction)
|
|
|
|
### Key Properties
|
|
|
|
| Property | Formula | Description |
|
|
|:---------|:--------|:------------|
|
|
| **Domain** | $x \geq 0$ | Only non-negative inputs valid |
|
|
| **Range** | $y \geq 0$ | Output always non-negative |
|
|
| **Product Rule** | $\sqrt{ab} = \sqrt{a} \cdot \sqrt{b}$ | Factors separate under sqrt |
|
|
| **Quotient Rule** | $\sqrt{a/b} = \sqrt{a} / \sqrt{b}$ | Division becomes ratio of roots |
|
|
| **Power Relation** | $\sqrt{x} = x^{0.5}$ | Half-power equivalence |
|
|
| **Inverse** | $(\sqrt{x})^2 = x$ | Squaring reverses sqrt |
|
|
| **Identity** | $\sqrt{0} = 0$, $\sqrt{1} = 1$ | Fixed points |
|
|
|
|
### Derivative
|
|
|
|
$$
|
|
\frac{d}{dx}\sqrt{x} = \frac{1}{2\sqrt{x}}
|
|
$$
|
|
|
|
The derivative approaches infinity as $x \to 0^+$, meaning small changes near zero produce large output changes.
|
|
|
|
## Financial Applications
|
|
|
|
### Variance Stabilization
|
|
|
|
For data where standard deviation scales with the mean (Poisson-like behavior), sqrt transformation normalizes variance:
|
|
|
|
$$
|
|
\text{Var}(\sqrt{X}) \approx \text{constant}
|
|
$$
|
|
|
|
This enables statistical techniques that assume homoscedasticity.
|
|
|
|
### Volatility Scaling
|
|
|
|
When volatility is proportional to price level:
|
|
|
|
$$
|
|
\sigma_{price} \propto P \implies \sigma_{\sqrt{P}} \approx \text{constant}
|
|
$$
|
|
|
|
The sqrt transformation can normalize volatility for cross-asset comparison.
|
|
|
|
### Distance Metrics
|
|
|
|
Euclidean distance in feature space:
|
|
|
|
$$
|
|
d = \sqrt{\sum_i (x_i - y_i)^2}
|
|
$$
|
|
|
|
### Risk Metrics
|
|
|
|
Volatility from variance:
|
|
|
|
$$
|
|
\sigma = \sqrt{\text{Var}(R)}
|
|
$$
|
|
|
|
## Implementation Details
|
|
|
|
### Negative Input Handling
|
|
|
|
Mathematical $\sqrt{x}$ is undefined for $x < 0$. This implementation:
|
|
- Returns last valid value for negative inputs
|
|
- Returns last valid value for NaN/Infinity
|
|
- Starts with lastValid = 0.0 (since sqrt(0) = 0)
|
|
|
|
### Precision Characteristics
|
|
|
|
| Input Range | Relative Precision |
|
|
|:------------|:-------------------|
|
|
| $x > 0$ | Full 15-16 digits |
|
|
| $x = 0$ | Exact (returns 0) |
|
|
| $x < 0$ | Substituted with last valid |
|
|
|
|
### Streaming Characteristics
|
|
|
|
| Metric | Value |
|
|
|:-------|:------|
|
|
| **Warmup Period** | 0 |
|
|
| **Memory** | O(1) |
|
|
| **Complexity** | O(1) per update |
|
|
|
|
## Performance Profile
|
|
|
|
### Operation Count (Scalar)
|
|
|
|
| Operation | Count | Notes |
|
|
|:----------|:-----:|:------|
|
|
| SQRT | 1 | Hardware instruction (FSQRT) |
|
|
| CMP | 1 | Domain check |
|
|
| **Total** | ~15-20 cycles | Platform dependent |
|
|
|
|
### Quality Metrics
|
|
|
|
| Metric | Score | Notes |
|
|
|:-------|:-----:|:------|
|
|
| **Accuracy** | 10/10 | IEEE 754 compliant |
|
|
| **Timeliness** | 10/10 | Zero lag |
|
|
| **Smoothness** | N/A | Transform preserves input characteristics |
|
|
|
|
## Usage Examples
|
|
|
|
### Basic Usage
|
|
|
|
```csharp
|
|
// Create SQRT transformer
|
|
var sqrt = new Sqrttrans();
|
|
|
|
// Transform a value
|
|
var price = new TValue(DateTime.UtcNow, 100.0);
|
|
var result = sqrt.Update(price); // 10.0
|
|
```
|
|
|
|
### Variance Stabilization
|
|
|
|
```csharp
|
|
var prices = new TSeries();
|
|
// ... populate with price data
|
|
|
|
// Apply sqrt transform for variance stabilization
|
|
var sqrtPrices = Sqrttrans.Calculate(prices);
|
|
|
|
// Now compute statistics on transformed data
|
|
var stdDev = StdDev.Calculate(sqrtPrices, 20);
|
|
```
|
|
|
|
### Batch Processing
|
|
|
|
```csharp
|
|
var source = new double[] { 1, 4, 9, 16, 25 };
|
|
var output = new double[source.Length];
|
|
|
|
Sqrttrans.Calculate(source, output);
|
|
// output: { 1, 2, 3, 4, 5 }
|
|
```
|
|
|
|
### Chained with Square
|
|
|
|
```csharp
|
|
// Round-trip: sqrt(x^2) = |x|
|
|
var values = bars.Close;
|
|
var squared = values.Select(v => new TValue(v.Time, v.Value * v.Value)).ToTSeries();
|
|
var recovered = Sqrttrans.Calculate(squared);
|
|
// recovered ≈ abs(original)
|
|
```
|
|
|
|
## Common Pitfalls
|
|
|
|
1. **Negative Input**: Prices are always positive, but derived values (returns, differences) can be negative. Sqrt is undefined for negatives—this implementation returns last valid value.
|
|
|
|
2. **Zero Amplification**: Near zero, small changes in input cause large changes in sqrt output. $\sqrt{0.01} = 0.1$ but $\sqrt{0.0001} = 0.01$—a 100x input change yields only 10x output change.
|
|
|
|
3. **Reversal Requires Squaring**: To undo sqrt, square the result. Unlike log/exp which are inverses, sqrt/square are only one-way inverses for non-negative values.
|
|
|
|
4. **Variance Stabilization Assumption**: Sqrt is optimal when variance scales linearly with mean. For other heteroscedasticity patterns, log or Box-Cox may be more appropriate.
|
|
|
|
5. **Magnitude Compression**: Sqrt compresses large values more than small ones. $\sqrt{10000} = 100$ but $\sqrt{100} = 10$. This can distort technical analysis patterns that depend on absolute price levels.
|
|
|
|
## Validation
|
|
|
|
| Test | Status |
|
|
|:-----|:------:|
|
|
| **Math.Sqrt Parity** | ✅ |
|
|
| **Perfect Squares (0,1,4,9,16,25,100)** | ✅ |
|
|
| **Irrational Results (√2, √3, √5)** | ✅ |
|
|
| **Inverse of Square** | ✅ |
|
|
| **Product Rule** | ✅ |
|
|
| **Quotient Rule** | ✅ |
|
|
| **Power Relationship (x^0.5)** | ✅ |
|
|
| **Small Values (1e-10 to 1e-2)** | ✅ |
|
|
| **Large Values (1e10 to 1e100)** | ✅ |
|
|
|
|
## References
|
|
|
|
- Box, G.E.P., & Cox, D.R. (1964). "An Analysis of Transformations." *Journal of the Royal Statistical Society, Series B*, 26(2), 211-252.
|
|
- Tukey, J.W. (1977). *Exploratory Data Analysis*. Addison-Wesley. (Variance-stabilizing transformations)
|
|
- IEEE 754-2019. *Standard for Floating-Point Arithmetic*. (sqrt specification) |