4.1 KiB
LOGTRANS: Natural Logarithm Transformer
The logarithm is one of the most useful mathematical functions, turning multiplicative relationships into additive ones—a property that makes many financial calculations tractable.
| Property | Value |
|---|---|
| Category | Numeric |
| Inputs | Source (close) |
| Parameters | None |
| Outputs | Single series (LOGTRANS) |
| Output range | Varies (see docs) |
| Warmup | 0 bars |
| PineScript | logtrans.pine |
- The LOG transformer applies the natural logarithm function
\ln(x)to input values. - No configurable parameters; computation is stateless per bar.
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The LOG transformer applies the natural logarithm function \ln(x) to input values. This point-wise transformation compresses large values and expands small ones, making it essential for analyzing multiplicative processes like compounded returns.
Mathematical Foundation
The natural logarithm is defined as the inverse of the exponential function:
y = \ln(x) \quad \text{where} \quad e^y = x
Key identities:
\ln(1) = 0\ln(e) = 1\ln(e^n) = n
Logarithm Rules
Product Rule:
\ln(a \cdot b) = \ln(a) + \ln(b)
Quotient Rule:
\ln\left(\frac{a}{b}\right) = \ln(a) - \ln(b)
Power Rule:
\ln(a^n) = n \cdot \ln(a)
Financial Applications
Log Returns
Log returns (continuously compounded returns) are computed as:
r_t = \ln\left(\frac{P_t}{P_{t-1}}\right) = \ln(P_t) - \ln(P_{t-1})
Log returns have desirable properties:
- Additive over time: Multi-period return is the sum of single-period returns
- Symmetric: A +10% log return followed by -10% returns to original price
- Approximately equal to simple returns for small changes
Volatility Analysis
Log-transformed prices are often used in volatility modeling because:
- Standard deviation of log returns estimates volatility
- Log prices follow geometric Brownian motion (GBM) under common models
Domain Restrictions
The natural logarithm is only defined for positive real numbers:
\text{Domain}: x > 0
Invalid inputs (zero, negative, NaN, Infinity) return the last valid output value—a common pattern in financial indicators to prevent propagation of invalid data.
Performance Profile
Operation Count
| Operation | Count | Notes |
|---|---|---|
| Math.Log | 1 | Single transcendental function call |
| Comparison | 2 | Finite check, positive check |
Cycles per value: ~15-25 (dominated by log computation)
SIMD Considerations
The Calculate span method includes AVX2 detection but falls back to scalar processing for proper last-valid-value handling. Pure SIMD vectorization of log is possible but requires handling domain violations differently.
API Usage
Streaming Mode
var log = new Logtrans();
var result = log.Update(new TValue(time, price));
Batch Mode
var logPrices = Logtrans.Calculate(priceSeries);
Span Mode
Logtrans.Calculate(sourceSpan, outputSpan);
Chaining
var logTransform = new Logtrans(priceSource);
// logTransform.Last updates automatically when priceSource publishes
Common Pitfalls
-
Zero/Negative Inputs: Log of zero or negative numbers is undefined. The implementation substitutes last valid value.
-
Numerical Precision: For values very close to 1, use
Math.Log1p(x-1)for better precision (not implemented here). -
Overflow Potential:
\exp(\ln(x)) = xonly within floating-point precision limits. -
Inverse Relationship: Remember that LOG compresses large values—a 10x price increase only doubles the log value.
References
- Wilmott, P. (2006). "Paul Wilmott on Quantitative Finance." Wiley.
- Hull, J. (2018). "Options, Futures, and Other Derivatives." Pearson.