SQUEEZE — squeeze (price-drop) trading
SQUEEZE trades “squeezes” — sharp price drops with a quick bounce. A buy limit order sits a configured percentage below the binding of the previous closed candle (default: its low, the “safest” binding) and trails down while lows keep printing lower; after a fill the bot takes profit a configured percentage above its entry (the average entry when there were several buys). Many small cycles, short holding times. Works best on liquid pairs and short timeframes; the momentum filters below keep it out of runaway dumps and pumps. In the terminal this is the Squeeze strategy — the same mechanics described in the knowledge base.
Prerequisites: the bot lifecycle and the
shared config blocks. Required fields: type,
symbol, exchange, deposit, price.
How it trades
- On each candle of
timeFrame(milliseconds here) the bot takes the binding of the previous closed candle (trailingEdge, default: low) as its reference point. - The buy limit sits
price.percent.buy% below the binding and trails it down while the binding keeps moving lower (withtrailingenabled, the entry follows the falling price and executes on the reversal). A sharp drop into the limit → the bot buys. - Position exits at
price.percent.sell% above the entry (average entry across multiple buys) — or rides further withtrailingSell. oncePerTimeFramecaps entries at one buy per candle;trailingRulesfilter out abnormal momentum.
Minimal working config
Verified POST /v2/bots body — 1-minute candles, buy at −4% from the binding, take profit at
+1%, binding on the candle low:
{
"type": "SQUEEZE",
"settings": {
"type": "SQUEEZE",
"symbol": { "base": "SOL", "quote": "USDT" },
"ticker": "SOLUSDT",
"name": "1m, 4% 1%, low",
"exchange": "binance-futures",
"timeFrame": 60000,
"deposit": { "value": "11", "asset": "USDT" },
"noticeLevel": 1,
"timeout": { "type": "ttl", "value": 604800000 },
"positionSide": "LONG",
"stop": [
{ "strategy": "breakeven", "complete": true, "disabled": true,
"trigger": { "type": "kline" }, "order": { "type": "MARKET" } }
],
"price": { "percent": { "buy": "4", "sell": "1" } },
"trailing": true,
"trailingEdge": "low",
"trailingSell": false,
"oncePerTimeFrame": true,
"range": [ { "type": "kline_percent", "max": "2" } ]
}
}
SQUEEZE-specific fields
Everything from the shared blocks applies
(symbol — object form; timeFrame — milliseconds), plus:
| Field | Type | Meaning |
|---|---|---|
price ✳ |
object | { "percent": { "buy", "sell" } } — both strings. buy — the “Buy trigger”: % below the previous candle’s binding where the buy limit sits. sell — the “Sell trigger”: % above the entry price for take-profit |
trailing |
boolean | Trail entries/exits to capture more of the move |
trailingEdge |
enum | The binding — the candle reference point the buy trigger is measured from: open · close · high · low · hl2 (=(H+L)/2) · oc2 (=(O+C)/2) · hlc3 (=(H+L+C)/3) · ohlc4 (=(O+H+L+C)/4) |
trailingSell |
boolean | Trail specifically the exit — ride a breakout past the fixed TP |
trailingPart |
boolean | Partial trailing — trail a fraction of the position, take fixed profit on the rest |
trailingRules |
array | Momentum filter rules, discriminated by type — see below |
oncePerTimeFrame |
boolean | At most one buy per candle — the anti-overtrading switch |
TrailingRuleDef — momentum filters:
| Field | Meaning |
|---|---|
type ✳ |
pump_filter — reacts to upward momentum · dump_filter — to downward momentum |
maxChange |
Price-change % threshold that activates the filter |
count |
Consecutive candles required to confirm momentum (pump_filter only) |
edge |
Candle edge for the comparison (same 8 values as trailingEdge) |
timeout |
Milliseconds after which the filter resets |
Advanced example — timeout stop, pump filter, trailing exit
Verified config: 5-minute candles, entry −3%, TP +2%. Two stop rules — a disabled breakeven
blank plus a timeout_buy stop that fires after 1 hour without completion, may retrigger
after a 3-minute snooze, at most 5 times per run. A pump_filter keeps the bot out of vertical
candles, and trailingSell lets winners run:
{
"type": "SQUEEZE",
"settings": {
"type": "SQUEEZE",
"symbol": { "base": "SOL", "quote": "USDT" },
"ticker": "SOLUSDT",
"name": "5m, 3% 2%, close, filtered",
"exchange": "binance-futures",
"timeFrame": 300000,
"deposit": { "value": "50", "asset": "USDT", "allocate": "auto" },
"noticeLevel": 2,
"timeout": { "type": "ttl", "value": 2592000000 },
"positionSide": "LONG",
"short": false,
"stop": [
{ "strategy": "breakeven", "complete": true, "disabled": true,
"trigger": { "type": "kline" }, "order": { "type": "MARKET" } },
{ "strategy": "timeout_buy", "complete": false, "disabled": false,
"trigger": { "type": "timeout", "value": "3600000" },
"order": { "type": "MARKET" },
"snoozeDuration": 180000, "maxStops": 5 }
],
"price": { "percent": { "buy": "3", "sell": "2" } },
"trailing": true,
"trailingEdge": "close",
"trailingSell": true,
"trailingPart": false,
"oncePerTimeFrame": true,
"trailingRules": [
{ "type": "pump_filter", "maxChange": 5, "count": 3, "edge": "close", "timeout": 120000 }
],
"range": [ { "type": "kline_percent", "max": "3" } ]
}
}
Pitfalls
price.percent.buy/sellare strings ("4", not4) — whiletrailingRules.maxChangeandtimeoutare numbers. Mixed on purpose; copy the examples.- Without
oncePerTimeFramea volatile candle can fire several entries — enable it unless over-trading is the strategy. trailingSell: trueoverrides the fixedsell% behavior — the exit follows the price instead of parking at +N%.- The
timeout_buystop’strigger.valueis a duration in ms as a string ("3600000") — a different animal from Fn.Format level triggers. - SQUEEZE reacts on candles of
timeFrame(ms —60000= 1m); see the shapes table before porting configs to ALGO, wheresymbolis a string andtimeFrameis in minutes. - Knowledge-base methodology: a “safe” config completes within 1–3 candles, and the sell percentage is kept at no more than ⅓ of the buy percentage (buy −3% → take ≤ +1%); no single config stays profitable forever — revisit it as the market changes.
Verified against API spec v2.0.0 · 2026-07-12