DeFi Pro Signals

10 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.
Detect an unusually large net ETF inflow on the latest bar.Parameters
NameTypeRangeDefaultDescription
windowint5 — 20020Prior bars forming the rolling baseline (latest excluded)
z_thresholdfloat0.5 — 5.02.0Std-devs above the baseline mean to fire
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "etf_inflow_spike",
    "parameters": {
        "window": 20,
        "z_threshold": 2.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Confirm sustained net ETF inflows.Parameters
NameTypeRangeDefaultDescription
windowint2 — 605Number of consecutive latest bars that must be positive
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "etf_inflow_streak",
    "parameters": {
        "window": 5
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect funding crossing from non-positive to positive on the latest bar.No configurable parameters.Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "funding_flip_positive",
    "parameters": {}
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check for a persistently negative funding regime (shorts pay longs).Parameters
NameTypeRangeDefaultDescription
windowint3 — 20014Number of recent bars to average
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "funding_negative_regime",
    "parameters": {
        "window": 14
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Confirm a calm lending market (narrow borrow-supply spread).Parameters
NameTypeRangeDefaultDescription
thresholdfloat0.001 — 0.50.02Maximum spread to consider calm
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "lending_spread_low",
    "parameters": {
        "threshold": 0.02
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect the borrow-supply spread crossing above its moving average.Parameters
NameTypeRangeDefaultDescription
windowint3 — 20020Moving-average window
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "lending_spread_widening",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect a large upcoming unlock cliff (supply-shock warning).Parameters
NameTypeRangeDefaultDescription
windowint5 — 20030Prior bars forming the rolling baseline (latest excluded)
z_thresholdfloat0.5 — 5.02.0Std-devs above the baseline mean the latest pressure must reach to fire
min_pressurefloat0.005 — 0.50.03Floor the latest pressure must also clear, so noise around a tiny baseline does not fire
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "token_unlock_cliff_ahead",
    "parameters": {
        "window": 30,
        "z_threshold": 2.0,
        "min_pressure": 0.03
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Confirm there is little near-term unlock dilution ahead.Parameters
NameTypeRangeDefaultDescription
thresholdfloat0.005 — 0.250.02Maximum acceptable unlock pressure (a value of 0.02 means 2% of circulating supply)
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "token_unlock_pressure_low",
    "parameters": {
        "threshold": 0.02
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect treasury value crossing above its moving average.Parameters
NameTypeRangeDefaultDescription
windowint3 — 20020Moving-average window
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "treasury_accumulation_trigger",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check whether the protocol treasury is growing over the window.Parameters
NameTypeRangeDefaultDescription
windowint3 — 20014Lookback for the comparison
Example
from mangrove_kb import RuleRegistry

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