Momentum Signals

42 signals in this category. See the full Signal Catalog for the cross-category index, or the Signals Overview for an introduction. Click a signal to expand parameters and examples.
Check if Awesome Oscillator indicates bearish momentum.Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 155Fast SMA window
window_slowint20 — 6034Slow SMA window
thresholdfloat0.0 — 100.00.0Bearish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "ao_bearish",
    "parameters": {
        "window_fast": 5,
        "window_slow": 34,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Awesome Oscillator indicates bullish momentum.Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 155Fast SMA window
window_slowint20 — 6034Slow SMA window
thresholdfloat0.0 — 100.00.0Bullish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "ao_bullish",
    "parameters": {
        "window_fast": 5,
        "window_slow": 34,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Awesome Oscillator crosses zero line.Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 155Fast SMA window
window_slowint20 — 6034Slow SMA window
directionstr-bullishDirection: ‘bullish’ for cross above, ‘bearish’ for cross below
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "ao_zero_cross",
    "parameters": {
        "window_fast": 5,
        "window_slow": 34,
        "direction": "bullish"
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if the Absolute Price Oscillator is negative (bearish regime).Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 10012Fast EMA period
window_slowint5 — 20026Slow EMA period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "apo_bearish",
    "parameters": {
        "window_fast": 12,
        "window_slow": 26
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if the Absolute Price Oscillator (EMA fast - EMA slow) is positive. Equivalent to the MACD line being above zero (bullish momentum regime).Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 10012Fast EMA period
window_slowint5 — 20026Slow EMA period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "apo_bullish",
    "parameters": {
        "window_fast": 12,
        "window_slow": 26
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect APO crossing below zero (bearish momentum onset).Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 10012Fast EMA period
window_slowint5 — 20026Slow EMA period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "apo_cross_down",
    "parameters": {
        "window_fast": 12,
        "window_slow": 26
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect APO crossing above zero (bullish momentum onset).Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 10012Fast EMA period
window_slowint5 — 20026Slow EMA period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "apo_cross_up",
    "parameters": {
        "window_fast": 12,
        "window_slow": 26
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Balance of Power indicates sellers in control on the current bar.No configurable parameters.Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "bop_bearish",
    "parameters": {}
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Balance of Power indicates buyers in control on the current bar. BOP = (close - open) / (high - low). Positive = buyers dominated the bar.No configurable parameters.Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "bop_bullish",
    "parameters": {}
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect Balance of Power crossing below zero (buyers -> sellers).No configurable parameters.Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "bop_cross_down",
    "parameters": {}
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect Balance of Power crossing above zero (sellers -> buyers).No configurable parameters.Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "bop_cross_up",
    "parameters": {}
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect CMO crossing below the overbought threshold (bearish momentum onset). Analogous to RSI crossing below 70.Parameters
NameTypeRangeDefaultDescription
windowint2 — 10014CMO lookback
thresholdfloat20.0 — 90.050.0Overbought threshold to cross below
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "cmo_cross_down",
    "parameters": {
        "window": 14,
        "threshold": 50.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect CMO crossing above the oversold threshold (bullish momentum return). Analogous to RSI crossing above 30.Parameters
NameTypeRangeDefaultDescription
windowint2 — 10014CMO lookback
thresholdfloat-90.0 — -20.0-50.0Oversold threshold to cross above
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "cmo_cross_up",
    "parameters": {
        "window": 14,
        "threshold": -50.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Chande Momentum Oscillator is above the overbought threshold. CMO ranges from -100 to +100; default threshold of +50 is standard (analogous to RSI 70).Parameters
NameTypeRangeDefaultDescription
windowint2 — 10014CMO lookback
thresholdfloat20.0 — 90.050.0Overbought threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "cmo_overbought",
    "parameters": {
        "window": 14,
        "threshold": 50.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Chande Momentum Oscillator is below the oversold threshold. Default threshold of -50 is standard (analogous to RSI 30).Parameters
NameTypeRangeDefaultDescription
windowint2 — 10014CMO lookback
thresholdfloat-90.0 — -20.0-50.0Oversold threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "cmo_oversold",
    "parameters": {
        "window": 14,
        "threshold": -50.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if price crosses below KAMA (bearish signal).Parameters
NameTypeRangeDefaultDescription
windowint5 — 3010Efficiency ratio period
pow1int1 — 102Fast smoothing constant
pow2int10 — 5030Slow smoothing constant
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "kama_cross_down",
    "parameters": {
        "window": 10,
        "pow1": 2,
        "pow2": 30
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if price crosses above KAMA (bullish signal).Parameters
NameTypeRangeDefaultDescription
windowint5 — 3010Efficiency ratio period
pow1int1 — 102Fast smoothing constant
pow2int10 — 5030Slow smoothing constant
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "kama_cross_up",
    "parameters": {
        "window": 10,
        "pow1": 2,
        "pow2": 30
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Momentum (close - close[-n]) is negative. Indicates downward price momentum over the lookback window.Parameters
NameTypeRangeDefaultDescription
windowint1 — 20010Lookback period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "mom_bearish",
    "parameters": {
        "window": 10
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Momentum (close - close[-n]) is positive. Indicates upward price momentum over the lookback window.Parameters
NameTypeRangeDefaultDescription
windowint1 — 20010Lookback period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "mom_bullish",
    "parameters": {
        "window": 10
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect Momentum crossing below zero (bearish zero-line cross).Parameters
NameTypeRangeDefaultDescription
windowint1 — 20010Lookback period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "mom_cross_down",
    "parameters": {
        "window": 10
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect Momentum crossing above zero (bullish zero-line cross).Parameters
NameTypeRangeDefaultDescription
windowint1 — 20010Lookback period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "mom_cross_up",
    "parameters": {
        "window": 10
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if PPO crosses below signal line (bearish).Parameters
NameTypeRangeDefaultDescription
window_slowint15 — 5026Slow EMA period
window_fastint5 — 2012Fast EMA period
window_signint3 — 159Signal line period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "ppo_bearish_cross",
    "parameters": {
        "window_slow": 26,
        "window_fast": 12,
        "window_sign": 9
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if PPO crosses above signal line (bullish).Parameters
NameTypeRangeDefaultDescription
window_slowint15 — 5026Slow EMA period
window_fastint5 — 2012Fast EMA period
window_signint3 — 159Signal line period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "ppo_bullish_cross",
    "parameters": {
        "window_slow": 26,
        "window_fast": 12,
        "window_sign": 9
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if PVO crosses below signal line (bearish volume).Parameters
NameTypeRangeDefaultDescription
window_slowint15 — 5026Slow EMA period
window_fastint5 — 2012Fast EMA period
window_signint3 — 159Signal line period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "pvo_bearish_cross",
    "parameters": {
        "window_slow": 26,
        "window_fast": 12,
        "window_sign": 9
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if PVO crosses above signal line (bullish volume).Parameters
NameTypeRangeDefaultDescription
window_slowint15 — 5026Slow EMA period
window_fastint5 — 2012Fast EMA period
window_signint3 — 159Signal line period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "pvo_bullish_cross",
    "parameters": {
        "window_slow": 26,
        "window_fast": 12,
        "window_sign": 9
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if ROC crosses zero (momentum shift).Parameters
NameTypeRangeDefaultDescription
windowint1 — 5012ROC period
directionstr-bullishDirection: ‘bullish’ for cross above zero, ‘bearish’ for cross below
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "roc_momentum_shift",
    "parameters": {
        "window": 12,
        "direction": "bullish"
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Rate of Change indicates negative momentum.Parameters
NameTypeRangeDefaultDescription
windowint1 — 5012ROC period
thresholdfloat-10.0 — 10.00.0Negative momentum threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "roc_negative",
    "parameters": {
        "window": 12,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Rate of Change indicates positive momentum.Parameters
NameTypeRangeDefaultDescription
windowint1 — 5012ROC period
thresholdfloat-10.0 — 10.00.0Positive momentum threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "roc_positive",
    "parameters": {
        "window": 12,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if RSI crosses below a threshold level. Returns True when RSI was at or above the threshold in the previous bar and is now below the threshold in the current bar. In crypto markets, consider higher thresholds (80/20) during strong trends.Parameters
NameTypeRangeDefaultDescription
windowint2 — 10014RSI calculation window
thresholdfloat0.0 — 100.050.0Threshold level to cross below
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "rsi_cross_down",
    "parameters": {
        "window": 14,
        "threshold": 50.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if RSI crosses above a threshold level. Returns True when RSI was at or below the threshold in the previous bar and is now above the threshold in the current bar. In crypto markets, consider higher thresholds (80/20) during strong trends.Parameters
NameTypeRangeDefaultDescription
windowint2 — 10014RSI calculation window
thresholdfloat0.0 — 100.050.0Threshold level to cross above
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "rsi_cross_up",
    "parameters": {
        "window": 14,
        "threshold": 50.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if RSI is above the overbought threshold. RSI values above 70 typically indicate overbought conditions, suggesting the asset may be due for a pullback. In crypto markets, consider higher thresholds (80/20) during strong trends.Parameters
NameTypeRangeDefaultDescription
windowint2 — 10014RSI calculation window
thresholdfloat50.0 — 100.070.0Overbought threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "rsi_overbought",
    "parameters": {
        "window": 14,
        "threshold": 70.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if RSI is below the oversold threshold. RSI values below 30 typically indicate oversold conditions, suggesting the asset may be due for a bounce. In crypto markets, consider higher thresholds (80/20) during strong trends.Parameters
NameTypeRangeDefaultDescription
windowint2 — 10014RSI calculation window
thresholdfloat0.0 — 50.030.0Oversold threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "rsi_oversold",
    "parameters": {
        "window": 14,
        "threshold": 30.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Stochastic %K is above the overbought threshold.Parameters
NameTypeRangeDefaultDescription
windowint5 — 5014%K period
smooth_windowint1 — 103%K smoothing period
thresholdfloat70.0 — 100.080.0Overbought threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "stoch_overbought",
    "parameters": {
        "window": 14,
        "smooth_window": 3,
        "threshold": 80.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Stochastic %K is below the oversold threshold.Parameters
NameTypeRangeDefaultDescription
windowint5 — 5014%K period
smooth_windowint1 — 103%K smoothing period
thresholdfloat0.0 — 30.020.0Oversold threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "stoch_oversold",
    "parameters": {
        "window": 14,
        "smooth_window": 3,
        "threshold": 20.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Stochastic RSI indicates overbought condition. In crypto markets, consider adjusting thresholds during strong trends.Parameters
NameTypeRangeDefaultDescription
windowint5 — 3014RSI period
smooth1int1 — 103Stochastic %K smoothing
smooth2int1 — 103Stochastic %D smoothing
thresholdfloat0.6 — 1.00.8Overbought threshold (0-1 scale)
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "stochrsi_overbought",
    "parameters": {
        "window": 14,
        "smooth1": 3,
        "smooth2": 3,
        "threshold": 0.8
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Stochastic RSI indicates oversold condition. In crypto markets, consider adjusting thresholds during strong trends.Parameters
NameTypeRangeDefaultDescription
windowint5 — 3014RSI period
smooth1int1 — 103Stochastic %K smoothing
smooth2int1 — 103Stochastic %D smoothing
thresholdfloat0.0 — 0.40.2Oversold threshold (0-1 scale)
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "stochrsi_oversold",
    "parameters": {
        "window": 14,
        "smooth1": 3,
        "smooth2": 3,
        "threshold": 0.2
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if True Strength Index indicates bearish momentum. TSI below zero indicates bearish momentum.Parameters
NameTypeRangeDefaultDescription
window_slowint10 — 5025Slow EMA period
window_fastint5 — 2513Fast EMA period
thresholdfloat-50.0 — 50.00.0Bearish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "tsi_bearish",
    "parameters": {
        "window_slow": 25,
        "window_fast": 13,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if True Strength Index indicates bullish momentum. TSI above zero indicates bullish momentum.Parameters
NameTypeRangeDefaultDescription
window_slowint10 — 5025Slow EMA period
window_fastint5 — 2513Fast EMA period
thresholdfloat-50.0 — 50.00.0Bullish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "tsi_bullish",
    "parameters": {
        "window_slow": 25,
        "window_fast": 13,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Ultimate Oscillator indicates overbought condition.Parameters
NameTypeRangeDefaultDescription
window_shortint3 — 207Short window
window_mediumint7 — 3014Medium window
window_longint14 — 5028Long window
thresholdfloat60.0 — 90.070.0Overbought threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "uo_overbought",
    "parameters": {
        "window_short": 7,
        "window_medium": 14,
        "window_long": 28,
        "threshold": 70.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Ultimate Oscillator indicates oversold condition.Parameters
NameTypeRangeDefaultDescription
window_shortint3 — 207Short window
window_mediumint7 — 3014Medium window
window_longint14 — 5028Long window
thresholdfloat10.0 — 40.030.0Oversold threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "uo_oversold",
    "parameters": {
        "window_short": 7,
        "window_medium": 14,
        "window_long": 28,
        "threshold": 30.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Williams %R is above the overbought threshold. Williams %R ranges from -100 to 0. Values above -20 indicate overbought.Parameters
NameTypeRangeDefaultDescription
windowint5 — 5014Lookback window
thresholdfloat-30.0 — 0.0-20.0Overbought threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "williams_r_overbought",
    "parameters": {
        "window": 14,
        "threshold": -20.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Williams %R is below the oversold threshold. Williams %R ranges from -100 to 0. Values below -80 indicate oversold.Parameters
NameTypeRangeDefaultDescription
windowint5 — 5014Lookback window
thresholdfloat-100.0 — -70.0-80.0Oversold threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "williams_r_oversold",
    "parameters": {
        "window": 14,
        "threshold": -80.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False