7.9 KiB
JERK: Third Derivative
Acceleration tells you the trend is changing. Jerk tells you that change is itself changing—the earliest possible warning.
| Property | Value |
|---|---|
| Category | Numeric |
| Inputs | Source (close) |
| Parameters | None |
| Outputs | Single series (JERK) |
| Output range | Varies (see docs) |
| Warmup | 4 bars |
| PineScript | jerk.pine |
- JERK measures the rate of change of acceleration—called "jerk" in physics.
- No configurable parameters; computation is stateless per bar.
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
JERK measures the rate of change of acceleration—called "jerk" in physics. As the third derivative, it detects changes in momentum dynamics before they appear in acceleration, velocity, or price. A positive jerk means acceleration is increasing; negative means acceleration is decreasing. This O(1) streaming implementation uses dual FMA optimization and SIMD batch processing for four-point calculations.
Historical Context
The third derivative (jerk) appears in mechanical engineering, robotics, and ride comfort analysis. Roller coasters are designed to minimize jerk; elevators smooth their motion to reduce it. In financial markets, jerk reveals sudden shifts in how fast the trend is accelerating or decelerating.
While first and second derivatives see wide use in technical analysis (momentum, ROC, acceleration indicators), the third derivative remains underutilized. This is partly computational—four consecutive points are needed—and partly interpretive: jerk is abstract. Yet it provides the earliest mathematical signal of trend character change.
Consider: price is rising, acceleration is positive (strong uptrend). If jerk turns negative, acceleration will soon decrease, then velocity will peak, then price will top. Jerk leads the entire sequence.
QuanTAlib implements JERK as the discrete third difference with dual FMA optimization, SIMD batch processing, and full bar correction support.
Architecture & Physics
JERK computes the third finite difference with four-point history:
1. Third Difference Operation
The fundamental operation:
J_t = V_t - 3V_{t-1} + 3V_{t-2} - V_{t-3}
This is algebraically equivalent to:
J_t = A_t - A_{t-1}
where A is the second derivative (acceleration).
2. Dual FMA Optimization
The formula uses two Fused Multiply-Add operations:
\text{term}_1 = \text{FMA}(-3, V_{t-1}, V_t)
\text{term}_2 = \text{FMA}(3, V_{t-2}, -V_{t-3})
J_t = \text{term}_1 + \text{term}_2
This structure reduces rounding error and leverages pipelined FMA units on modern CPUs.
3. State Management
State consists of:
Prev1: The previous input valueV_{t-1}Prev2: The value before thatV_{t-2}Prev3: The value before thatV_{t-3}LastValidValue: Last known finite value for NaN/Infinity substitutionCount: Number of values processed (0, 1, 2, 3, or 4+)
The indicator becomes "hot" (fully warmed up) after 4 values.
Mathematical Foundation
Discrete Third Derivative
For a time series V:
J_t = \frac{d^3V}{dt^3} \approx V_t - 3V_{t-1} + 3V_{t-2} - V_{t-3}
This is the forward difference approximation of the third derivative.
Binomial Coefficients
The coefficients (1, -3, 3, -1) are the alternating binomial coefficients for n=3:
\binom{3}{0} = 1, \quad -\binom{3}{1} = -3, \quad \binom{3}{2} = 3, \quad -\binom{3}{3} = -1
Derivative Chain
JERK completes the derivative hierarchy:
\text{Slope}_t = V_t - V_{t-1}
\text{Accel}_t = V_t - 2V_{t-1} + V_{t-2}
\text{Jerk}_t = V_t - 3V_{t-1} + 3V_{t-2} - V_{t-3}
Interpretation Matrix
| Jerk | Accel | Slope | Meaning |
|---|---|---|---|
J > 0 |
A > 0 |
S > 0 |
Uptrend strengthening at increasing rate |
J < 0 |
A > 0 |
S > 0 |
Uptrend strengthening but rate slowing |
J > 0 |
A < 0 |
S > 0 |
Uptrend weakening but rate of weakening slowing |
J < 0 |
A < 0 |
S > 0 |
Uptrend weakening at increasing rate |
J > 0 |
A < 0 |
S < 0 |
Downtrend strengthening but rate slowing |
J < 0 |
A < 0 |
S < 0 |
Downtrend strengthening at increasing rate |
J > 0 |
A > 0 |
S < 0 |
Downtrend weakening at increasing rate |
J < 0 |
A > 0 |
S < 0 |
Downtrend weakening but rate slowing |
Inflection Detection
Jerk zero-crossings can indicate second-order inflection points:
J_t \times J_{t-1} < 0 \implies \text{Acceleration inflection point}
This precedes the acceleration zero-crossing, which precedes the velocity peak/trough.
Performance Profile
Operation Count (Streaming Mode, Scalar)
| Operation | Count | Cost (cycles) | Subtotal |
|---|---|---|---|
| FMA | 2 | 4 | 8 |
| ADD | 1 | 1 | 1 |
| NEG | 1 | 1 | 1 |
| MOV (state update) | 4 | 1 | 4 |
| CMP (IsFinite check) | 1 | 1 | 1 |
| Total | 9 | — | ~15 cycles |
Batch Mode (512 values, SIMD)
| Architecture | Vector Width | Elements/Op | Total Ops (512 values) |
|---|---|---|---|
| AVX-512 | 512 bits | 8 doubles | 64 |
| AVX | 256 bits | 4 doubles | 128 |
| ARM64 Neon | 128 bits | 2 doubles | 256 |
| Scalar | 64 bits | 1 double | 512 |
Batch efficiency (512 bars):
| Mode | Cycles/bar | Total (512 bars) | Speedup |
|---|---|---|---|
| Scalar streaming | 15 | 7,680 | 1× |
| AVX-512 SIMD | 1.9 | 973 | 8× |
| AVX SIMD | 3.8 | 1,946 | 4× |
Quality Metrics
| Metric | Score | Notes |
|---|---|---|
| Accuracy | 10/10 | Exact finite difference |
| Timeliness | 10/10 | Zero lag (instantaneous) |
| Smoothness | 1/10 | Extreme noise amplification |
| Computational Cost | 10/10 | Dual FMA + bookkeeping |
| Memory | 10/10 | ~80 bytes state |
Validation
JERK is a fundamental operation. Validation confirms exact match with manual calculation and derivative chain composition.
| Library | Status | Notes |
|---|---|---|
| TA-Lib | N/A | Not implemented |
| Skender | N/A | Not implemented |
| Manual Calculation | ✅ | Exact match |
| Derivative Chain | ✅ | Jerk = Accel - Accel_{t-1} matches |
Common Pitfalls
-
Catastrophic Noise Sensitivity: Third derivatives amplify noise cubically. A 1% random wiggle becomes a wild jerk spike. Pre-smooth the input significantly (14+ period EMA minimum) before computing JERK.
-
Scale Dependency: JERK output scales with input magnitude cubed. A $100 stock has 1,000,000× larger jerks than a $1 stock. Normalization is essential for cross-instrument comparison.
-
Warmup Period: JERK requires 4 values to produce meaningful output. The first three outputs are always 0.
-
Abstract Interpretation: Jerk doesn't have an intuitive physical meaning for most traders. Use it as an early warning signal, not a direct trading trigger.
-
Lead Time vs. Reliability: Jerk provides the earliest signal but is also the most prone to false signals. Combine with lower derivatives for confirmation.
-
Using isNew Incorrectly: When processing live ticks within the same bar, use
Update(value, isNew: false). When a new bar opens, useisNew: true(default). -
Memory Footprint: ~80 bytes per instance. Negligible for most use cases.
-
Derivative Chain Verification: JERK should equal the difference of consecutive ACCEL values. Use this identity to verify implementation correctness.
References
- Newton, Isaac. (1687). "Philosophiæ Naturalis Principia Mathematica."
- Numerical Methods: Finite Difference Approximations.
- Eager, David et al. (2016). "Beyond velocity and acceleration: jerk, snap and higher derivatives." European Journal of Physics.