Config Reference

This page documents every configuration field. The structure mirrors your JSONC editor in /dashboard/config.
For conceptual explanations of feature behavior, see How GridBT Works and the individual feature pages, such as Rebalancer.

Grid Core Settings

FieldDefaultDescription
spacingPct0.37Percentage gap between grid levels. Higher spacing = fewer orders, more profit per cycle. Example: At $2,000 anchor with 0.37% spacing, level +1 is ~$2,007.40.
ordersPerSide25Orders placed on each side of anchor when grid is constructed. More orders = wider coverage but more margin used.
maxOrdersPerSide100Soft cap. When orders exceed this on one side, the bot trims the furthest orders.
maxGridOrdersPerSide150Hard safety cap. The bot will never place more than this many orders per side.
orderSizeUsd5.5USD value per order. Base size before multipliers. See Position Sizing.

Risk Management

FieldDefaultDescription
maxNetExposureUsd1000Primary cross-mode risk limit. Net exposure is abs(longUsd - shortUsd). At or above this value, new OPEN orders are blocked on the larger side while the smaller side can keep opening to reduce imbalance.
maxGrossPositionUsd2000Secondary cross-mode safety limit. Gross exposure is longUsd + shortUsd. At or above this value, new OPEN orders are blocked on both sides to cap total exposure growth.
warningThresholdPct0.8Fraction of max at which the bot logs warnings. At 0.8, warnings start at 80% of the limit.
minPositionQty-1Reserve quantity. Value of -1 means "reserve 1 qtyStep" so position is never fully closed.

Rebalancer

Controls how the bot corrects position drift. See How the Rebalancer Works for the conceptual explanation.
FieldDefaultDescription
enabledtrueMaster switch. When disabled, the bot ignores position drift entirely.
seedModefalseWhen true, disables rebalancing entirely. Use this when you want to run the grid without any position drift correction.
minTriggerRatio2.0Minimum imbalance (as multiple of orderSizeUsd) before rebalancing activates.
pivotRatio10.0Imbalance level at which base correction rate (2.5%) is used. Smaller imbalances get higher rates.
maxDistributionRate20.0Maximum correction percentage per fill.
priceGatingtrueWhen enabled, amplified CLOSE orders are paused until price is at or above the average add price (or has fallen past the buffer). Prevents amplified closes at unfavorable prices.
priceGatingBufferPct10Buffer zone below average add price. At 10%, amplified CLOSE orders remain paused while price is within 10% below your average.

Exo Indicator

Amplifies OPEN orders during extreme market conditions. See How Exo Indicator Works for details on the indicators used.
FieldDefaultDescription
enabledtrueMaster switch.
forceActivefalseBypasses all indicator checks. Warning: Only use for testing.
multiplier1.25Order size multiplier when active. At 1.25, OPEN orders are 125% of normal.
maxDurationCandles4Max candles active. On 7-minute candles, 4 = ~28 minutes max.

Trigger Thresholds

All four conditions must pass simultaneously to start accumulation. Fields are nested under trigger in your config (e.g., trigger.rsiOversoldThreshold):
FieldLongShortDescription
trigger.rsiOversoldThreshold28N/ARSI must be below this for longs.
trigger.rsiOverboughtThresholdN/A73RSI must be above this for shorts.
trigger.wtOversoldThreshold-53N/AWaveTrend level must be below this for longs.
trigger.wtOverboughtThresholdN/A53WaveTrend level must be above this for shorts.
trigger.requireWtMomentumtruetrueWaveTrend momentum direction: wt1 > wt2 for longs, wt1 < wt2 for shorts.
trigger.requirePriceBelowBBtruetruePrice must be beyond the Bollinger Band.

Continuation Thresholds

Relaxed conditions to maintain accumulation once triggered. Fields are nested under continuation:
FieldLongShortDescription
continuation.rsiOversoldThreshold32N/AMore relaxed than trigger (28).
continuation.rsiOverboughtThresholdN/A66More relaxed than trigger (73).
continuation.wtOversoldThreshold-43N/AMore relaxed than trigger (-53).
continuation.wtOverboughtThresholdN/A43More relaxed than trigger (53).
continuation.requireWtMomentumtruetrueMomentum direction still required during continuation.
continuation.requirePriceBelowBBfalsefalseBB check not required for continuation.

Indicator Parameters

FieldDefaultDescription
rsiLength13RSI calculation period (candles).
bbLength100Bollinger Bands moving average period.
bbStdDev1.25Bollinger Bands standard deviation multiplier.
wtChannelLen9WaveTrend channel length (smoothing).
wtAverageLen27WaveTrend average length.
wtSmaLen3WaveTrend signal line smoothing.

Opportunity Scanner

Auto-opens a new hedge-mode grid after a qualified long-liquidation cascade. See Opportunity Scanner for the conceptual explanation and tier examples.
FieldDefaultDescription
enabledfalseMaster switch. When disabled, the scanner does not subscribe or open new scanner positions.
allowedSymbols[]Optional allow list. Empty means all eligible universe symbols are allowed.
blockedSymbols[]Symbols to always exclude. Block list wins over allow list.
maxConcurrentPositions3Max number of open scanner positions at the same time.
seedLongUsd500USD value for the long seed leg. Must be greater than or equal to seedShortUsd.
seedShortUsd250USD value for the short seed leg. Must be positive and less than or equal to seedLongUsd.
hardStop{ mode: 'percent_net', value: -10 }Frozen stop-loss threshold stored at entry. Negative value required.
profitTake{ mode: 'percent_net', value: 10 }Frozen profit-take threshold stored at entry. Positive value required.
profitTakeMinAgeHours6Minimum age before profit-take can close the position. Set 0 to disable the age gate.
cascadeWindowMs600000Detection window size in milliseconds. Default is 10 minutes.
cascadeThresholdUsd2000000Flat liquidation threshold when no matching tier overrides it.
cascadeMinZScore3Flat z-score requirement when no matching tier overrides it.
cascadeDedupMs900000Per-symbol retrigger lockout after a detected cascade. Default is 15 minutes.
cooldownHours6Per-symbol cooldown after a scanner position closes.

Opportunity Scanner hardStop and profitTake

FieldAllowed valuesDescription
modeusd or percent_netusd uses a fixed dollar PnL. percent_net uses a percentage of frozen net exposure.
valueSigned numberHard stop must be negative. Profit take must be positive.

Opportunity Scanner cascadeTiers

Optional per-liquidity overrides for cascadeThresholdUsd and cascadeMinZScore.
FieldDefaultDescription
cascadeTiers[]Array of turnover-based detection tiers. Empty means every symbol uses the flat top-level threshold and z-score.
cascadeTiers[].minTurnover24hUsdnoneMinimum 24h turnover for the tier to apply. Highest matching tier wins.
cascadeTiers[].cascadeThresholdUsdnoneLiquidation threshold for symbols in this tier.
cascadeTiers[].cascadeMinZScorenoneZ-score threshold for symbols in this tier.

Opportunity Scanner pumpGuard

Rejects symbols that still look too extended on the 24h view.
FieldDefaultDescription
pumpGuard.enabledtrueMaster switch for the pump guard.
pumpGuard.maxPrice24hPct10Reject if the symbol is still up more than this percentage over 24h.
pumpGuard.minDrawdownFromHighPct25Require the current price to be at least this far below the 24h high.

PnD Protection

Prevents the bot from placing OPEN orders during sharp price moves. See PnD Protection for the full explanation.
FieldDefaultDescription
enabledtrueMaster switch.
closeFillsThreshold8Number of close fills that triggers protection. At 8 fills with 0.37% spacing, catches ~3% moves.
withinSeconds60Time window for counting fills.
cooldownDurationMinutes14How long the bot pauses after triggering.
reconstructOnExpiretrueWhen cooldown ends, rebuild grid from current price.

Position Balancer

Amplifies CLOSE orders to take profit faster when holding large, profitable positions. See How the Position Balancer Works.
FieldDefaultDescription
enabledtrueMaster switch.
minProfitPct1.0Minimum ROE% required. Price must have moved at least 1% in your favor.
tiersSee belowPosition utilization tiers with multipliers. Higher tiers checked first.

Default Tiers

positionPctmultiplierMeaning
0.901.75At 90%+ of max, CLOSE orders are 175% of normal.
0.751.5At 75%+ of max, CLOSE orders are 150% of normal.
0.501.25At 50%+ of max, CLOSE orders are 125% of normal.

Hedge Guard

Amplifies long OPEN orders when long exposure falls behind short. See How Hedge Guard Works.
FieldDefaultDescription
enabledtrueMaster switch. Only applies to long mode.
multiplier1.5OPEN order multiplier when Hedge Guard is active (150% of normal).
entryThresholdPct0.667Activates when longUsd < shortUsd × 0.667 (short is 50%+ larger).
exitThresholdPct0.9Deactivates when longUsd > shortUsd × 0.9 (approaching balance).
cooldownMs6000060-second cooldown after deactivation and on startup.

Short Size Guard

Reduces short base order size when short exposure has overtaken long. See How Short Size Guard Works.
FieldDefaultDescription
enabledfalseMaster switch. Only applies to short mode.
entryRatio1.0Activates when shortUsd / longUsd is at or above this ratio. At 1.0, parity is enough to turn it on.
exitRatio0.95Deactivates when shortUsd / longUsd falls below this ratio. Must be lower than entryRatio.
guardedMultiplier0.5Short base size multiplier while active. At 0.5, a $10 short base becomes $5 before other short-side sizing rules apply.
cooldownMs60000Cooldown after deactivation before the feature can turn on again.

Short Inventory Refill

Adds matched long and short seed when short inventory is nearly depleted after short CLOSE fills. See Short Inventory Refill.
FieldDefaultDescription
enabledfalseMaster switch. Only enabled short-mode rows can act on this feature.
triggerShortPositionUsd100Activates when the remaining short position is positive and at or below this USD value.
consecutiveTriggers2Number of qualifying checks in a row required before refill. At 2, two eligible checks must both stay below threshold.
seedUsd.long250USD value to seed on the long side during refill.
seedUsd.short250USD value to seed on the short side during refill.
cooldownMinutes15Cooldown after a refill attempt starts. Applies per symbol.

Gross Exposure Flattener

Reduces matched long and short exposure when gross position is high, balanced enough, and profitable. See Gross Exposure Flattener.
FieldDefaultDescription
enabledfalseMaster switch. Only enabled short-mode rows can trigger it.
triggerGrossPct0.5Activates when longUsd + shortUsd reaches this fraction of maxGrossPositionUsd. At 0.5, a $20,000 gross cap triggers checks at $10,000 gross.
flattenUsdPerSide1000USD value to reduce from each side. The bot converts this to one base quantity and applies the same quantity to long and short.
maxNetToGrossPct0.25Skips when abs(longUsd - shortUsd) / (longUsd + shortUsd) is above this value.
minCombinedUnrealisedPnlUsd25Minimum combined unrealised PnL across long and short before flattening can start.
minEstimatedFlattenPnlUsd5Minimum estimated PnL for the fixed flatten slice.
consecutiveTriggers2Number of qualifying exposure checks in a row required before activation.
cooldownMinutes15Cooldown after a flatten attempt starts. Applies per symbol.
The v1 config intentionally does not include targetGrossPct. Each attempt uses the configured fixed slice and then restarts from the refreshed position.

Profit Lock

Config-managed Profit Locks use defaults.profitLocks as the global source of truth. Set enabled: true and the settings apply to every enabled symbol in pairs. Those symbols become read-only in the popup.
"defaults": {
  "profitLocks": {
    "enabled": true,
    "triggerKind": "short_gte_long",
    "autoCycle": {
      "enabled": true,
      "seedLongUsd": 500,
      "seedShortUsd": 250,
      "maxCycles": 10
    }
  }
}
For granular control, place a profitLock override inside the existing pairs entry for the symbol. Profit Lock is symbol-wide, so if both enabled long and short rows define profitLock, the values must match.
"pairs": {
  "HYPEUSDT": [
    {
      "enabled": true,
      "mode": "long",
      "profitLock": {
        "triggerKind": "short_gte_long",
        "autoCycle": {
          "seedLongUsd": 700,
          "seedShortUsd": 300,
          "maxCycles": 25
        }
      }
    },
    { "enabled": true, "mode": "short" }
  ],
  "LINKUSDT": [
    { "enabled": true, "mode": "long", "profitLock": { "enabled": false } },
    { "enabled": true, "mode": "short" }
  ]
}
FieldDefaultDescription
defaults.profitLocksomittedOptional defaults-level block. Omitted means config saves leave popup-managed locks untouched.
defaults.profitLocks.enablednoneEnables config ownership for every enabled symbol. false leaves popup-managed locks untouched.
defaults.profitLocks.triggerKindnoneGlobal usd or short_gte_long trigger. Required when defaults.profitLocks.enabled is true.
defaults.profitLocks.targetPnlUsdnoneRequired for usd. Must be omitted for short_gte_long.
defaults.profitLocks.autoCycle.enabledtrueCreates or updates Auto-Cycle config for each managed symbol. Long-side EXO must be enabled.
defaults.profitLocks.autoCycle.seedLongUsdnoneLong seed notional. Must be greater than seedShortUsd.
defaults.profitLocks.autoCycle.seedShortUsdnoneShort seed notional.
defaults.profitLocks.autoCycle.targetIncrementUsdnoneRequired for usd triggers. Optional and ignored for short_gte_long; the runtime reuses the same trigger kind with no USD target.
defaults.profitLocks.autoCycle.maxCycles10Integer from 1 to 9999.
pairs.<symbol>[].profitLock.enabledinheritedSet false to clear the active lock and opt the symbol out while global ownership remains enabled.
pairs.<symbol>[].profitLock.triggerKindinheritedOptional symbol-wide trigger override.
pairs.<symbol>[].profitLock.targetPnlUsdinheritedOptional symbol-wide USD target override.
pairs.<symbol>[].profitLock.autoCycleinheritedOptional symbol-wide Auto-Cycle override.
Config saves do not change a triggered lock's trigger kind or target. Resume or clear the symbol first, then save the new config. For config-managed symbols, clear or resume by setting pairs.<symbol>[].profitLock.enabled to false and saving Strategy Config.

Mode Overrides

The modes section lets you set different defaults for long vs short:
"modes": {
  "long": {
    "orderSizeUsd": 10       // Larger orders for longs
  },
  "short": {
    "orderSizeUsd": 5.5      // Smaller orders for shorts
  }
}
Any field from defaults can be overridden here. Mode settings override defaults, and pair-specific settings override modes.
Note: Exposure limits (maxNetExposureUsd, maxGrossPositionUsd) are cross-mode and cannot be overridden per mode. They apply to both long and short positions together.

Pair Configuration

The pairs section enables specific symbols:
"pairs": {
  "HYPEUSDT": [
    { "enabled": true, "mode": "long" },
    { "enabled": true, "mode": "short" }
  ],
  "ETHUSDT": [
    { "enabled": true, "mode": "long" },
    { "enabled": false, "mode": "short" }  // Short disabled
  ]
}
Note: Anchor price is auto-managed. It's set from market price on first run and persisted in the database. You don't need to configure it.