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.

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.
triggerHedgePositionUsd100Activates when the remaining HEDGE-side position is positive and at or below this USD value. (Legacy alias: triggerShortPositionUsd.)
consecutiveTriggers2Number of qualifying checks in a row required before refill. At 2, two eligible checks must both stay below threshold.
seedUsd.dominant250USD value to seed on the cycle's dominant side during refill. (Legacy alias: seedUsd.long.)
seedUsd.hedge250USD value to seed on the cycle's hedge side during refill. (Legacy alias: seedUsd.short.)
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.
A config save is accepted while a lock is triggered (frozen); it no longer requires clearing or resuming the symbol first. The frozen trade is left untouched — the save does NOT change a triggered lock's own trigger kind or USD target, and the frozen remnant is never re-evaluated. Auto-Cycle fields (seed sizes, directions, maxCycles, targetIncrementUsd) are updated and take effect at the next re-entry; the new trigger kind/target apply only once the lock fully clears (position abandoned, or the symbol opted out) and a fresh watching lock is created. To force a trigger-kind/target change to take effect immediately, clear the symbol 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.