API documentation

FIBO — Fibonacci grid bot (“Aftershock”)

FIBO lays a grid of buy and sell orders on Fibonacci retracement levels inside a price range you define. It automates the “Aftershock” (AS) trading strategy: working the correction wave that follows a growth phase — buys on the retracement levels, sells one level up. When several levels fill, the sells are re-placed around the average entry — part of the position exits at breakeven, part with profit; once the sells execute, that level’s play is complete. In a strong one-way trend the grid accumulates a position — that is what stop-loss rules are for.

Prerequisites: the bot lifecycle and the shared config blocks.

How it trades

  1. You define the range — bottom ("0") and top ("1") — and intermediate Fibonacci levels (0.236, 0.382, 0.5, 0.618, 0.786), each as a channel with its own buy price, sell price and share of the deposit.
  2. The bot places buy orders at channel levels below the current price. When a channel’s buy fills, its sell order goes out at that channel’s sell price.
  3. When several levels fill, the sells are placed around the average entry — in the terminal this looks like take-profits shifted to breakeven (knowledge-base example: levels 0.5 and 0.382 both fill → everything is offered at 0.5; one buy exits flat, the other with profit). Once the sells execute, the play is complete — per the AS methodology a worked level is not re-traded — the strategy terminates (FIBO has no auto-restart: restart/reuse exist only for Channel and Squeeze).
  4. Optional trailing delays entries: buys follow the falling price and execute on a configured reversal, catching knives closer to the bottom.

Minimal working config

Verified POST /v2/bots body — five channels (three active + the two required boundaries):

{
  "type": "FIBO",
  "settings": {
    "type": "FIBO",
    "symbol": { "base": "SOL", "quote": "USDT" },
    "ticker": "SOLUSDT",
    "name": "SOL Fibo Basic",
    "exchange": "binance-futures",
    "timeFrame": 900000,
    "deposit": { "value": "300", "asset": "USDT", "strategy": "fixed", "allocate": "no_reserve" },
    "positionSide": "LONG",
    "trailing": false,
    "strategy": "fixed",
    "channels": [
      { "name": "1",     "depositePercent": "0",  "buy": "68.50", "sell": "69.50", "fiboPrice": "68.50" },
      { "name": "0.500", "depositePercent": "35", "buy": "66.50", "sell": "68.50", "fiboPrice": "66.50" },
      { "name": "0.382", "depositePercent": "30", "buy": "66.00", "sell": "68.00", "fiboPrice": "66.00" },
      { "name": "0.236", "depositePercent": "25", "buy": "65.00", "sell": "67.50", "fiboPrice": "65.00" },
      { "name": "0",     "depositePercent": "10", "buy": "64.00", "sell": "66.50", "fiboPrice": "64.00" }
    ],
    "mergeChannels": false,
    "green": 2
  }
}

Then POST /bots/{id}/runs — and watch the botStatus and orders channels.

Channel definition — FiboChannelDef

Field Type Meaning
name string Level label: "0", "0.236", "0.382", "0.500", "0.618", "0.786", "1"
depositePercent string Share of the deposit for this channel (note the spelling — depositePercent, sic). The sum across channels should equal 100; boundary levels may carry "0"
buy string | number | object Buy price. Usually a string price; an object enables dynamic (polynomial point) pricing
sell string | number | object Sell price — same forms
fiboPrice string The calculated Fibonacci level price for the channel

⚠️ Channels "0" and "1" are mandatory. They define the grid boundaries; the bot validates their presence and refuses to start without them — even with depositePercent: "0".

FIBO-specific fields

Everything from the shared blocks applies (symbol — object form; timeFramemilliseconds), plus:

Field Type Meaning
strategy fixed | auto Deposit allocation across channels: fixed — exactly your depositePercent split · auto — automatic rebalancing based on profit levels
channels array The grid — see above
range object | array Price-range constraints, {type, min?, max?} (e.g. scaled_price)
maxRangePercent number Gate: if the lowest→highest channel span exceeds this %, the bot will not start
trailing boolean Trail entries: buys follow the price down and execute on reversal
trailingFrom number (ms) Timestamp trailing starts from — must be within the last year
trailingMaxChange number Max trailing delta in % — a reversal beyond it triggers the order
buyOnly boolean Never sell automatically — pure DCA accumulation mode
waitFullSell boolean Wait until all sell orders of the cycle fill before re-entering buys
crossChannelSell boolean Allow a sell to close positions opened by a different channel once its target is reached
mergeChannels boolean Merge adjacent channels with similar allocations into one wider channel (fewer open orders)
green number «Green zone» threshold: unrealized PnL % above which trailing take-profit logic may engage

✳ — required (full required set: type, symbol, exchange, deposit).

Advanced example — all 7 levels, trailing, prepared stop-loss

Verified config: full Fibonacci ladder, trailing from a fixed timestamp with a 30% cap, 30-day TTL, a pre-configured but disabled breakeven stop (enable it later at runtime via update_stoploss), and waitFullSell discipline:

{
  "type": "FIBO",
  "settings": {
    "type": "FIBO",
    "symbol": { "base": "SOL", "quote": "USDT" },
    "ticker": "SOLUSDT",
    "name": "Lvl: 0.5, 22.15 → 63.93+",
    "exchange": "binance-futures",
    "timeFrame": 60000,
    "deposit": { "value": "100", "asset": "USDT", "allocate": "auto" },
    "noticeLevel": 2,
    "timeout": { "type": "ttl", "value": 2592000000 },
    "positionSide": "LONG",
    "short": false,
    "trailing": true,
    "trailingFrom": 1782311125920,
    "trailingMaxChange": 0.3,
    "waitFullSell": true,
    "strategy": "fixed",
    "orders": { "buy": { "type": "LIMIT" }, "sell": { "type": "LIMIT" } },
    "stop": [
      { "strategy": "breakeven", "complete": true, "disabled": true,
        "trigger": { "type": "kline" }, "order": { "type": "MARKET" } }
    ],
    "range": [ { "type": "scaled_price", "max": "44.438156474850443902" } ],
    "channels": [
      { "name": "1",     "depositePercent": "0",      "buy": "63.93", "sell": "63.93", "fiboPrice": "63.93" },
      { "name": "0.786", "depositePercent": "0",      "buy": "55.05", "sell": "54.94", "fiboPrice": "54.99" },
      { "name": "0.618", "depositePercent": "0",      "buy": "48.02", "sell": "47.92", "fiboPrice": "47.97" },
      { "name": "0.500", "depositePercent": "20.000", "buy": "43.09", "sell": "43",    "fiboPrice": "43.04" },
      { "name": "0.382", "depositePercent": "30.000", "buy": "38.15", "sell": "38.07", "fiboPrice": "38.11" },
      { "name": "0.236", "depositePercent": "50.000", "buy": "32.05", "sell": "31.98", "fiboPrice": "32.01" },
      { "name": "0",     "depositePercent": "0",      "buy": "22.15", "sell": "22.15", "fiboPrice": "22.15" }
    ],
    "mergeChannels": false,
    "green": 3
  }
}

Pitfalls

  • Missing "0"/"1" channels — the most common start failure. Add both, even at 0%.
  • depositePercent must sum to 100 across channels (boundaries may be "0").
  • The field is spelled depositePercent — a copy of the platform’s internal name; a «corrected» depositPercent is silently ignored (remember, deep validation happens at start).
  • trailingFrom older than one year is rejected.
  • timeFrame here is milliseconds (60000 = 1m) — unlike ALGO where it is minutes (the shapes table).
  • In strong trends the grid accumulates inventory: cap the damage with a real (enabled) stop-loss or maxRangePercent.

Verified against API spec v2.0.0 · 2026-07-11

Cookie Preferences

Manage your cookie preferences below. Necessary cookies are always active as they are essential for the website to function properly.

Strictly Necessary

Essential for the website to function. These cookies cannot be disabled.

Analytics

Help us understand how visitors interact with our website by collecting and reporting information anonymously.

Marketing

Used to track visitors across websites to display relevant advertisements.

Preferences

Allow the website to remember choices you make, such as language or region.