5.7 KiB
SLOPE: First Derivative (Velocity)
The simplest measure of change reveals the most: is it going up, or going down?
| Property | Value |
|---|---|
| Category | Numeric |
| Inputs | Source (close) |
| Parameters | None |
| Outputs | Single series (SLOPE) |
| Output range | Varies (see docs) |
| Warmup | 2 bars |
| PineScript | slope.pine |
- SLOPE measures the instantaneous rate of change—the velocity of a time series.
- No configurable parameters; computation is stateless per bar.
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
SLOPE measures the instantaneous rate of change—the velocity of a time series. As the first derivative, it answers the fundamental question: how fast is the value changing right now? A positive slope means ascending; negative means descending; zero means flat. This O(1) streaming implementation uses SIMD optimization for batch calculations and handles bar corrections via state rollback.
Historical Context
The first derivative appears in Newton's calculus (1687) and forms the foundation of technical analysis. Every momentum indicator, every rate-of-change calculation, every velocity measure reduces to some form of first difference.
In discrete time series, the continuous derivative \frac{dx}{dt} becomes the finite difference \Delta x = x_t - x_{t-1}. This simple subtraction underpins RSI's momentum, MACD's signal line, and every trend-following system that asks "which way is it moving?"
QuanTAlib implements SLOPE as a first-class indicator with full streaming support, SIMD batch optimization, and proper state management for bar corrections.
Architecture & Physics
SLOPE is a memoryless differentiator with minimal state requirements:
1. First Difference Operation
The fundamental operation:
S_t = V_t - V_{t-1}
where V_t is the current value and V_{t-1} is the previous value.
2. State Management
State consists of:
PrevValue: The previous input valueLastValidValue: Last known finite value for NaN/Infinity substitutionCount: Number of values processed (0, 1, or 2+)
The indicator becomes "hot" (fully warmed up) after 2 values.
3. Bar Correction via Rollback
When isNew=false, the indicator rolls back to the previous state before recalculating:
\text{State}_{current} \leftarrow \text{State}_{previous}
This enables real-time bar updates without corrupting the running calculation.
Mathematical Foundation
Discrete First Derivative
For a time series V:
S_t = V_t - V_{t-1}
This is the forward difference approximation of the derivative.
Interpretation
| Slope Value | Meaning |
|---|---|
S > 0 |
Price ascending (bullish) |
S < 0 |
Price descending (bearish) |
S = 0 |
Price unchanged (consolidation) |
| $ | S |
| $ | S |
Relationship to Higher Derivatives
SLOPE forms the basis of the derivative chain:
\text{Accel}_t = \text{Slope}_t - \text{Slope}_{t-1}
\text{Jolt}_t = \text{Accel}_t - \text{Accel}_{t-1}
Performance Profile
Operation Count (Streaming Mode, Scalar)
| Operation | Count | Cost (cycles) | Subtotal |
|---|---|---|---|
| SUB | 1 | 1 | 1 |
| MOV (state update) | 2 | 1 | 2 |
| CMP (IsFinite check) | 1 | 1 | 1 |
| Total | 4 | — | ~4 cycles |
SLOPE is one of the fastest possible indicators—a single subtraction plus state bookkeeping.
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 | 4 | 2,048 | 1× |
| AVX-512 SIMD | 0.5 | 256 | 8× |
| AVX SIMD | 1 | 512 | 4× |
Quality Metrics
| Metric | Score | Notes |
|---|---|---|
| Accuracy | 10/10 | Exact finite difference |
| Timeliness | 10/10 | Zero lag (instantaneous) |
| Smoothness | 3/10 | Amplifies noise |
| Computational Cost | 10/10 | Single subtraction |
| Memory | 10/10 | ~48 bytes state |
Validation
SLOPE is a fundamental operation. Validation confirms exact match with manual calculation.
| Library | Status | Notes |
|---|---|---|
| TA-Lib | N/A | Uses ROC (percent change) |
| Skender | N/A | Uses Slope regression |
| Manual Calculation | ✅ | Exact match |
Common Pitfalls
-
Noise Amplification: First derivatives amplify high-frequency noise. A 1% price wiggle becomes a full slope reversal. Consider smoothing the input or output for noisy data.
-
Scale Dependency: SLOPE output depends on input scale. A $100 stock has 100× larger slopes than a $1 stock. Normalize if comparing across instruments.
-
Warmup Period: SLOPE requires 2 values to produce meaningful output. The first output is always 0.
-
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: ~48 bytes per instance. Negligible for most use cases.
References
- Newton, Isaac. (1687). "Philosophiæ Naturalis Principia Mathematica."
- Numerical Methods: Finite Difference Approximations.