On-Chain 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.
Check whether exchanges saw net outflows over the window.Parameters
NameTypeRangeDefaultDescription
windowint2 — 20014Number of bars to sum
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "exchange_net_outflow",
    "parameters": {
        "window": 14
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect an unusually large net outflow from exchanges on the latest bar. Coins leaving exchanges reduce immediately sellable supply and are typically read as bullish.Parameters
NameTypeRangeDefaultDescription
windowint5 — 20020Number of prior bars forming the rolling baseline (the latest bar is excluded from its own baseline)
z_thresholdfloat0.5 — 5.02.0How many standard deviations below the baseline mean the latest flow must be to fire
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "exchange_outflow_spike",
    "parameters": {
        "window": 20,
        "z_threshold": 2.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check whether top-holder concentration is declining over the window.Parameters
NameTypeRangeDefaultDescription
windowint2 — 20014Lookback for the comparison
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "holder_concentration_falling",
    "parameters": {
        "window": 14
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check whether top-holder concentration is below a threshold. Lower concentration means supply is more widely distributed and less exposed to a single-wallet dump.Parameters
NameTypeRangeDefaultDescription
thresholdfloat0.0 — 1.00.5Maximum acceptable top-holder share
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "holder_concentration_low",
    "parameters": {
        "threshold": 0.5
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect smart-money holdings crossing above their moving average.Parameters
NameTypeRangeDefaultDescription
windowint3 — 20020Moving-average window for the holdings baseline
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "smart_money_holdings_cross",
    "parameters": {
        "window": 20
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check whether smart-money holdings are higher than window bars ago.Parameters
NameTypeRangeDefaultDescription
windowint2 — 20014Lookback for the comparison
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "smart_money_holdings_rising",
    "parameters": {
        "window": 14
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect an unusually large smart-money inflow on the latest bar.Parameters
NameTypeRangeDefaultDescription
windowint5 — 20020Number of prior bars forming the rolling baseline (the latest bar is excluded from its own baseline)
z_thresholdfloat0.5 — 5.02.0How many standard deviations above the baseline mean the latest inflow must be to fire
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "smart_money_inflow_spike",
    "parameters": {
        "window": 20,
        "z_threshold": 2.0
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check whether smart money has been a net buyer over the window.Parameters
NameTypeRangeDefaultDescription
windowint2 — 20014Number of bars to sum
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "smart_money_net_positive",
    "parameters": {
        "window": 14
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Detect whale net flow flipping to accumulation.Parameters
NameTypeRangeDefaultDescription
windowint2 — 1007Smoothing window for the net-flow moving average
Example
from mangrove_kb import RuleRegistry

rule = {
    "name": "whale_accumulation_trigger",
    "parameters": {
        "window": 7
    }
}
result = RuleRegistry.evaluate(rule, df)
print(result)  # True or False
Check whether whales were net accumulators over the window.Parameters
NameTypeRangeDefaultDescription
windowint2 — 20014Number of bars to sum
Example
from mangrove_kb import RuleRegistry

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