Volume Signals

33 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 ADI (Accumulation/Distribution) is falling (bearish volume).Parameters
NameTypeRangeDefaultDescription
windowint5 — 5020Lookback for trend
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "adi_bearish",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if ADI (Accumulation/Distribution) is rising (bullish volume).Parameters
NameTypeRangeDefaultDescription
windowint5 — 5020Lookback for trend
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "adi_bullish",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Chaikin A/D Oscillator is negative (distribution regime).Parameters
NameTypeRangeDefaultDescription
fastint2 — 203Fast EMA period for AD
slowint5 — 5010Slow EMA period for AD
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "adosc_bearish",
    "parameters": {
        "fast": 3,
        "slow": 10
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Chaikin A/D Oscillator is positive (accumulation regime). Positive ADOSC = AD line’s fast EMA above its slow EMA, indicating short-term buying pressure relative to longer-term trend.Parameters
NameTypeRangeDefaultDescription
fastint2 — 203Fast EMA period for AD
slowint5 — 5010Slow EMA period for AD
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "adosc_bullish",
    "parameters": {
        "fast": 3,
        "slow": 10
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect ADOSC crossing below zero (distribution onset).Parameters
NameTypeRangeDefaultDescription
fastint2 — 203Fast EMA period for AD
slowint5 — 5010Slow EMA period for AD
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "adosc_cross_down",
    "parameters": {
        "fast": 3,
        "slow": 10
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect ADOSC crossing above zero (accumulation onset).Parameters
NameTypeRangeDefaultDescription
fastint2 — 203Fast EMA period for AD
slowint5 — 5010Slow EMA period for AD
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "adosc_cross_up",
    "parameters": {
        "fast": 3,
        "slow": 10
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if CMF (Chaikin Money Flow) indicates selling pressure.Parameters
NameTypeRangeDefaultDescription
windowint10 — 5020CMF period
thresholdfloat-1.0 — 1.00.0Bearish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "cmf_bearish",
    "parameters": {
        "window": 20,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if CMF (Chaikin Money Flow) indicates buying pressure.Parameters
NameTypeRangeDefaultDescription
windowint10 — 5020CMF period
thresholdfloat-1.0 — 1.00.0Bullish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "cmf_bullish",
    "parameters": {
        "window": 20,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if cumulative return from start is positive.Parameters
NameTypeRangeDefaultDescription
thresholdfloat0.0 — 100.00.0Minimum cumulative return in percent
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "cumulative_return_positive",
    "parameters": {
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if cumulative return has reached target.Parameters
NameTypeRangeDefaultDescription
targetfloat1.0 — 100.010.0Target cumulative return in percent
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "cumulative_return_target",
    "parameters": {
        "target": 10.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if daily return is negative.Parameters
NameTypeRangeDefaultDescription
thresholdfloat0.0 — 100.00.0Maximum return threshold in percent
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "daily_return_negative",
    "parameters": {
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if daily return is positive.Parameters
NameTypeRangeDefaultDescription
thresholdfloat0.0 — 100.00.0Minimum return threshold in percent
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "daily_return_positive",
    "parameters": {
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Ease of Movement indicates bearish (easy downward movement).Parameters
NameTypeRangeDefaultDescription
windowint5 — 3014EOM period
thresholdfloat0.0 — 100.00.0Bearish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "eom_bearish",
    "parameters": {
        "window": 14,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Ease of Movement indicates bullish (easy upward movement).Parameters
NameTypeRangeDefaultDescription
windowint5 — 3014EOM period
thresholdfloat0.0 — 100.00.0Bullish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "eom_bullish",
    "parameters": {
        "window": 14,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Force Index indicates bearish momentum.Parameters
NameTypeRangeDefaultDescription
windowint5 — 3013EMA period for smoothing
thresholdfloat0.0 — 100.00.0Bearish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "force_bearish",
    "parameters": {
        "window": 13,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if Force Index indicates bullish momentum.Parameters
NameTypeRangeDefaultDescription
windowint5 — 3013EMA period for smoothing
thresholdfloat0.0 — 100.00.0Bullish threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "force_bullish",
    "parameters": {
        "window": 13,
        "threshold": 0.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if the current price is above the Volume-Weighted Moving Average (VWMA). VWMA weights each bar’s close by its volume, emphasizing high-participation bars. Useful as a filter that incorporates conviction from volume.Parameters
NameTypeRangeDefaultDescription
windowint2 — 20020VWMA window in bars
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "is_above_vwma",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if KVO is below its signal line (bearish volume regime).Parameters
NameTypeRangeDefaultDescription
fastint5 — 10034Fast EMA period
slowint10 — 20055Slow EMA period
signal_windowint2 — 5013Signal-line EMA period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "kvo_bearish",
    "parameters": {
        "fast": 34,
        "slow": 55,
        "signal_window": 13
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect KVO crossing below its signal line (bearish volume onset).Parameters
NameTypeRangeDefaultDescription
fastint5 — 10034Fast EMA period
slowint10 — 20055Slow EMA period
signal_windowint2 — 5013Signal-line EMA period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "kvo_bearish_cross",
    "parameters": {
        "fast": 34,
        "slow": 55,
        "signal_window": 13
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if KVO is above its signal line (bullish volume regime).Parameters
NameTypeRangeDefaultDescription
fastint5 — 10034Fast EMA period
slowint10 — 20055Slow EMA period
signal_windowint2 — 5013Signal-line EMA period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "kvo_bullish",
    "parameters": {
        "fast": 34,
        "slow": 55,
        "signal_window": 13
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect KVO crossing above its signal line (bullish volume onset). Classic Klinger entry trigger; often confirms a price divergence.Parameters
NameTypeRangeDefaultDescription
fastint5 — 10034Fast EMA period for signed volume
slowint10 — 20055Slow EMA period for signed volume
signal_windowint2 — 5013Signal-line EMA period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "kvo_bullish_cross",
    "parameters": {
        "fast": 34,
        "slow": 55,
        "signal_window": 13
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if MFI (Money Flow Index) indicates overbought condition.Parameters
NameTypeRangeDefaultDescription
windowint5 — 3014MFI period
thresholdfloat70.0 — 95.080.0Overbought threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "mfi_overbought",
    "parameters": {
        "window": 14,
        "threshold": 80.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if MFI (Money Flow Index) indicates oversold condition.Parameters
NameTypeRangeDefaultDescription
windowint5 — 3014MFI period
thresholdfloat5.0 — 30.020.0Oversold threshold
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "mfi_oversold",
    "parameters": {
        "window": 14,
        "threshold": 20.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if NVI (Negative Volume Index) indicates smart money selling. NVI below its moving average suggests smart money distribution.Parameters
NameTypeRangeDefaultDescription
windowint100 — 200255EMA period for signal
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "nvi_bearish",
    "parameters": {
        "window": 255
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if NVI (Negative Volume Index) indicates smart money buying. NVI above its moving average suggests smart money accumulation.Parameters
NameTypeRangeDefaultDescription
windowint100 — 200255EMA period for signal
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "nvi_bullish",
    "parameters": {
        "window": 255
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if OBV is falling (bearish volume confirmation).Parameters
NameTypeRangeDefaultDescription
windowint5 — 5020Lookback for trend
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "obv_bearish",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if OBV is rising (bullish volume confirmation).Parameters
NameTypeRangeDefaultDescription
windowint5 — 5020Lookback for trend
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "obv_bullish",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if VPT (Volume Price Trend) is falling.Parameters
NameTypeRangeDefaultDescription
windowint5 — 5020Window for trend comparison
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "vpt_bearish",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if VPT (Volume Price Trend) is rising.Parameters
NameTypeRangeDefaultDescription
windowint5 — 5020Window for trend comparison
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "vpt_bullish",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if price is above VWAP (bullish bias).Parameters
NameTypeRangeDefaultDescription
windowint5 — 5014VWAP period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "vwap_above",
    "parameters": {
        "window": 14
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check if price is below VWAP (bearish bias).Parameters
NameTypeRangeDefaultDescription
windowint5 — 5014VWAP period
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "vwap_below",
    "parameters": {
        "window": 14
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect a bearish VWMA crossover (fast VWMA crosses below slow VWMA). Volume-weighted version of the classic SMA death cross.Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 1009Fast VWMA window
window_slowint2 — 20021Slow VWMA window
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "vwma_cross_down",
    "parameters": {
        "window_fast": 9,
        "window_slow": 21
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect a bullish VWMA crossover (fast VWMA crosses above slow VWMA). Volume-weighted version of the classic SMA golden cross. High-volume bars carry more weight, so the signal is less susceptible to low-volume noise.Parameters
NameTypeRangeDefaultDescription
window_fastint2 — 1009Fast VWMA window
window_slowint2 — 20021Slow VWMA window
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "vwma_cross_up",
    "parameters": {
        "window_fast": 9,
        "window_slow": 21
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False