Systemicalpha

Know Sure Thing

systemic:core-kstIndicatorsfunction1 cr

Inputs

NameTypeDescription
Long Rate Of ChangeintegerThe lookback period for the **longest-term** Rate of Change calculation.
Short Rate Of ChangeintegerThe lookback period for the **shortest-term** Rate of Change calculation.
Medium Short Rate Of ChangeintegerThe lookback period for the **medium short-term** Rate of Change calculation.
Medium Long Rate Of ChangeintegerThe lookback period for the **medium long-term** Rate of Change calculation.
Short WindowintegerThe Simple Moving Average period used to **smooth** the Short Rate of Change (ROC₁).
Medium Short WindowintegerThe Simple Moving Average period used to **smooth** the Medium Short Rate of Change (ROC₂).
Medium Long WindowintegerThe Simple Moving Average period used to **smooth** the Medium Long Rate of Change (ROC₃).
Long WindowintegerThe Simple Moving Average period used to **smooth** the Long Rate of Change (ROC₄).
Signal PeriodintegerThe number of periods used to calculate the **Signal Line** (a Simple Moving Average of the KST).
Price DatafloatarrayThe input price series used to calculate momentum across multiple timeframes.

Outputs

NameTypeDescription
KSTfloatarrayThe primary output: the weighted sum of four smoothed Rate of Change values.
Signal LinefloatarrayA smoothed version of the KST, calculated as a Simple Moving Average of the KST output.
DifferencefloatarrayThe spread between the KST value and its Signal Line.

Overview

The Know Sure Thing (KST) is a momentum oscillator developed by Martin Pring and first published in 1992 in Stocks & Commodities magazine. Originally called the "Summed Rate of Change," the KST was designed to solve a fundamental problem in technical analysis: how to capture momentum across multiple time horizons in a single, actionable indicator.

Unlike simple momentum indicators that focus on a single lookback period, the KST combines four different Rate of Change (ROC) calculations spanning short-term to long-term cycles. By weighting longer-term momentum more heavily, the KST provides a smoothed view of price momentum that is less susceptible to noise while remaining responsive to genuine trend changes.

Key Insight: The KST oscillates above and below zero. Positive values indicate bullish momentum; negative values indicate bearish momentum. The magnitude reflects the strength of that momentum.


The Formula

The KST calculation proceeds in three stages:

Stage 1: Calculate Four Rate of Change Values

The Rate of Change measures the percentage change in price over a given period:

ROCn=Pcurrent−Pn periods agoPn periods ago×100\text{ROC}_n = \frac{P_{\text{current}} - P_{n \text{ periods ago}}}{P_{n \text{ periods ago}}} \times 100

Stage 2: Smooth Each ROC with a Simple Moving Average

Each ROC is smoothed using a Simple Moving Average (SMA) to reduce noise:

RCMAi=SMA(ROCi,windowi)\text{RCMA}_i = \text{SMA}(\text{ROC}_i, \text{window}_i)

Stage 3: Weight and Sum the Smoothed Values

The four smoothed ROC values are combined with fixed weights:

KST=(RCMA1×1)+(RCMA2×2)+(RCMA3×3)+(RCMA4×4)\boxed{\text{KST} = (\text{RCMA}_1 \times 1) + (\text{RCMA}_2 \times 2) + (\text{RCMA}_3 \times 3) + (\text{RCMA}_4 \times 4)}

The Signal Line is a 9-period SMA of the KST:

Signal Line=SMA(KST,9)\text{Signal Line} = \text{SMA}(\text{KST}, 9)

The Difference output provides the spread between KST and its signal line:

Difference=KST−Signal Line\text{Difference} = \text{KST} - \text{Signal Line}

Multi-Timeframe Architecture

The power of KST lies in its layered approach to momentum analysis. The following diagram illustrates how price data flows through the calculation:

flowchart TB
    subgraph INPUT["📊 Price Data"]
        P[Close Prices]
    end
    
    subgraph ROC["⚡ Rate of Change Calculations"]
        direction LR
        ROC1["ROC₁<br/>Short Period"]
        ROC2["ROC₂<br/>Mid-Short Period"]
        ROC3["ROC₃<br/>Mid-Long Period"]
        ROC4["ROC₄<br/>Long Period"]
    end
    
    subgraph SMA["📉 SMA Smoothing"]
        direction LR
        SMA1["SMA₁"]
        SMA2["SMA₂"]
        SMA3["SMA₃"]
        SMA4["SMA₄"]
    end
    
    subgraph WEIGHT["⚖️ Weighting"]
        direction LR
        W1["×1"]
        W2["×2"]
        W3["×3"]
        W4["×4"]
    end
    
    subgraph OUTPUT["📈 Outputs"]
        KST["KST Value"]
        SIG["Signal Line<br/>SMA of KST"]
        DIFF["Difference<br/>KST − Signal"]
    end
    
    P --> ROC1 & ROC2 & ROC3 & ROC4
    ROC1 --> SMA1 --> W1
    ROC2 --> SMA2 --> W2
    ROC3 --> SMA3 --> W3
    ROC4 --> SMA4 --> W4
    W1 & W2 & W3 & W4 --> KST
    KST --> SIG --> DIFF
    KST --> DIFF

Why Multiple Timeframes?

Financial markets exhibit cyclical behavior across different time horizons:

TimeframeTypical CycleKST ComponentWeight
Short-termDays to weeksROC₁ (10 periods)1 (10%)
Mid-shortWeeks to monthsROC₂ (15 periods)2 (20%)
Mid-longMonthsROC₃ (20 periods)3 (30%)
Long-termMonths to quartersROC₄ (30 periods)4 (40%)

The weighting scheme (1, 2, 3, 4) ensures that longer-term momentum—which tends to be more reliable for identifying major trends—has the greatest influence on the final KST value.


Default Parameters

The classic KST settings, as specified by Martin Pring, use the notation:

KST(10, 15, 20, 30, 10, 10, 10, 15, 9)

ParameterDescriptionDefault
ROC ShortShort-term ROC lookback10
ROC Mid-ShortMid-short-term ROC lookback15
ROC Mid-LongMid-long-term ROC lookback20
ROC LongLong-term ROC lookback30
Window ShortSMA period for ROC₁10
Window Mid-ShortSMA period for ROC₂10
Window Mid-LongSMA period for ROC₃10
Window LongSMA period for ROC₄15
Signal PeriodSMA period for signal line9

Timeframe-Specific Settings

Martin Pring recommends different settings for different analysis horizons:

Analysis TypeDataSettings
Short-termDaily(10, 15, 20, 30, 10, 10, 10, 15, 9)
Medium-termWeekly(10, 13, 15, 20, 10, 13, 15, 20, 9)
Long-termMonthly(9, 12, 18, 24, 6, 6, 6, 9, 9)

Interpreting KST Signals

1. Centerline Crossovers

The zero line acts as a momentum boundary:

ConditionInterpretation
KST > 0Bullish momentum dominates
KST < 0Bearish momentum dominates
KST crosses above 0Potential bullish trend beginning
KST crosses below 0Potential bearish trend beginning

2. Signal Line Crossovers

The most commonly used trading signals:

flowchart LR
    subgraph BULL["🟢 Bullish Signal"]
        B1["KST crosses<br/>ABOVE Signal Line"]
        B2["Consider buying<br/>or holding long"]
    end
    
    subgraph BEAR["🔴 Bearish Signal"]
        C1["KST crosses<br/>BELOW Signal Line"]
        C2["Consider selling<br/>or holding short"]
    end
    
    B1 --> B2
    C1 --> C2

Stronger signals occur when:

  • Bullish crossover happens below zero (momentum reversing from bearish to bullish)
  • Bearish crossover happens above zero (momentum reversing from bullish to bearish)

3. Divergences

Divergences between price and KST can signal potential reversals:

TypePrice ActionKST ActionImplication
Bullish DivergenceLower lowsHigher lowsDowntrend may be weakening
Bearish DivergenceHigher highsLower highsUptrend may be weakening

Caution: Divergences should be confirmed with other signals. KST divergences, like those in MACD or RSI, can persist for extended periods before price reverses—or may not result in reversals at all.


Practical Applications

Trend Confirmation Strategy

The KST excels at confirming whether a price trend has genuine momentum support:

  1. Identify the trend using price action or moving averages
  2. Confirm with KST: Ensure KST is positive (uptrend) or negative (downtrend)
  3. Use signal line crossovers to time entries in the direction of the trend
  4. Avoid counter-trend trades when KST strongly supports the opposite direction

Multi-Asset Momentum Comparison

Since KST normalizes momentum across different time horizons, it can be used to compare momentum strength across different assets. An asset with a higher KST reading may have stronger bullish momentum than one with a lower reading, helping with asset selection in portfolio construction.

Cycle Analysis

The KST's multi-timeframe construction makes it particularly useful for analysts interested in market cycles. By examining which ROC components contribute most to the KST value, one can infer which cycle lengths are currently dominant:

  • If short-term ROC is high but long-term is low: Short-term rally within a longer downtrend
  • If long-term ROC is high: Established trend with strong foundational momentum

Edge Cases and Considerations

During strong, persistent trends, the KST may:

  • Remain positive (or negative) for extended periods without crossing zero
  • Generate signal line crossovers that suggest momentum is slowing, not reversing

A signal line crossover in a strong trend often indicates a pause or consolidation rather than a true reversal. Use trend-following logic rather than counter-trend trades in these conditions.

Data Requirements

The KST requires sufficient historical data to calculate all four ROC values and their respective SMAs. With default settings, the indicator needs approximately:

Minimum periods≈max(ROC periods)+max(SMA windows)\text{Minimum periods} \approx \text{max}(\text{ROC periods}) + \text{max}(\text{SMA windows})

For default settings: 30+15=4530 + 15 = 45 periods minimum before meaningful KST values are produced.

Not Suitable for Overbought/Oversold

Unlike bounded oscillators (RSI, Stochastics), the KST has no fixed upper or lower limits. This makes it unsuitable for identifying overbought or oversold conditions. High KST readings simply indicate strong momentum—they do not predict reversals.


Missing Data

Gaps in price_data (closed-market weekends/holidays, missing prints) are None on every output — never a sentinel and never a look-ahead-filled value:

ScenarioOutput
Closed-market gapNone at that slot; every ROC and SMA stage runs over the observed-bar subsequence, so a Friday→Monday gap bridges as adjacent bars (an "N-bar" window means N observed bars, not N calendar days)
Warm-up (fewer than the required observed bars seen for a given ROC/SMA stage, or fewer than signal_period KST values for the Signal Line)None — never a partial-window average
All bars missingEvery slot on all 3 outputs None, no crash
Live tick on a gap slot[None] — correct and non-starving, never a stale repeated value

Data Alignment in Systemic

When using KST in Systemic, the price_data input expects a numeric time series. If you connect multiple data sources with different frequencies (e.g., using a higher timeframe indicator alongside lower timeframe price data), Systemic automatically handles alignment through upsampling and padding.

How alignment works:

  • Upsampling: Lower-frequency data is expanded to match the highest frequency by repeating the last known value until new data arrives
  • Length padding: Shorter series are extended by repeating the final data point to match the longest series

Example: If you connect daily Bitcoin prices to KST while a related indicator outputs hourly data, Systemic will upsample the daily data to hourly resolution. Each daily value will be held constant through all 24 hourly intervals until the next daily close.

For the KST parameters (rate_of_change_*, window_*, signal_period), these are typically constants. When a constant is provided, Systemic pads it to match the price data length, ensuring each timestamp has associated parameter values.

Tip: For most applications, keep all ROC and window parameters as constants. The KST's design assumes fixed lookback periods—varying them dynamically rarely provides analytical benefit and may produce unstable results.


Indicator Profile

The following chart compares KST's utility across stocks and cryptocurrency markets:

quadrantChart
    title KST Indicator Profile
    x-axis Low Popularity --> High Popularity
    y-axis Low Reliability --> High Reliability
    quadrant-1 High potential  
    quadrant-2 Established leaders
    quadrant-3 Niche tools
    quadrant-4 Popular but risky
    KST - Stocks: [0.45, 0.70]
    KST - Crypto: [0.35, 0.65]

Dimension Ratings

DimensionStocksCryptoNotes
Popularity4.5/103.5/10Well-known among technical analysts but overshadowed by MACD and RSI. Less adoption in crypto communities.
Reliability7.0/106.5/10Multi-timeframe synthesis reduces false signals. Slightly less reliable in crypto's 24/7 volatile markets.
Complexity6.0/106.0/10Requires understanding of ROC, SMA, and weighted sums. More parameters than simpler oscillators.
Versatility7.0/106.5/10Applicable across timeframes and asset classes. Default parameters designed for stocks; crypto may need adjustment.
Recent Interest4.0/104.5/10Classic indicator with steady niche following. Slight crypto interest due to cyclical market behavior.

Further Reading

Rendering diagrams...
© 2026 WanoLabs. All rights reservedAlpha build v0.1.5