📰 Latest: Introducing WaveRunner — A Configurable Grid Trading Framework for HaasOnline
Account

WaveRunner

Automated grid trading script. Configurable grid execution — you set the rules, the framework runs them.
Fish with a net, not a rod. WaveRunner places a ladder of buy orders below the current price and a matching ladder of sell orders above it. When price moves to a rung, the script executes that order. Each completed buy-sell pair captures the configured spread, gross of fees.
The idea in 30 seconds

Fish with a net, not a rod.

A trader with a rod has to predict where the fish will be. A trader with a net just spreads it across the water and waits for the fish to swim through.

WaveRunner is the net. It is designed for choppy, sideways, or modestly trending markets where price oscillates inside a band. Outcomes depend on user configuration, market conditions, and exchange execution.

A grid of rungs catching profitable cycles as price oscillates
Step 01 — Set the anchor

The script remembers the price it started at.

WaveRunner records the price at startup as the anchor, then builds a ladder of buy orders below it and sell orders above it.

You decide how many rungs, how far apart, and how large each order is. The framework handles execution.

WaveRunner anchor with sell rungs above and buy rungs below
Price wave crossing buy and sell rungs to complete cycles
Step 02 — Catch the waves

Buy at the dips. Sell at the peaks. Automatically.

When price drops to a buy rung, the script buys. When price rises to a sell rung, it sells. Each completed buy-sell pair captures the configured spread, gross of fees.

No predictions. No discretion. The ladder does the work.

Step 03 — Follow the market

The grid follows the market, not the other way around.

When price drifts so far the ladder becomes one-sided, the script cancels open orders and rebuilds around the new price.

This auto re-anchor is the core mechanism of the framework — it keeps grid execution responsive across regimes.

WaveRunner cancels open orders and re-anchors at the new price

Three safety mechanisms built into the framework

A grid execution framework is a simple machine. WaveRunner is one implementation of it — with guardrails the user can lean on.

ANCHOR-SCALE SAFETY

Cruise control eases off when conditions change.

As price drifts away from the anchor, WaveRunner automatically shrinks new orders. The script never deploys full-size orders into a runaway trend.

  • 100% size · near anchor
  • 75% · 10–25% away
  • 50% · > 25% away
AUTO RE-ANCHOR

The grid follows the market, automatically.

When the ladder becomes one-sided, the script cancels open orders, re-anchors at the current price, and rebuilds — no manual intervention required.

This is what keeps grid execution responsive across regimes.

MANUAL OVERRIDE — THE PANIC BUTTON

Flip Manual Reset 0 → 1.

The script immediately cancels open orders and re-anchors at the current price. For when you've decided the market has changed and don't want to wait for the auto-mechanism.

Getting started

Example starter configuration — BTC / USDT spot

An example configuration that satisfies the coverage rule below. Run your own backtests to validate against your chosen period and configure to your own risk tolerance.

Parameter Value Why
Buy Orders 25 25 rungs below the anchor
Sell Orders 25 25 rungs above the anchor
Price Spread 0.61% – 0.85% Distance between rungs. Tight enough to fill often.
Cooldown 5 hours Default. Pause after a fill before the next one.
Order Size — pick yours — A size you'd be comfortable holding 25 of.
Taker Fee 0.075% – 0.10% Enter your exchange's actual rate.
THE SINGLE MOST IMPORTANT RULE

slots × spread < ~20%

That ensures the script can reach the edge of the ladder and re-anchor when it needs to. Any wider and the script cannot re-anchor — inventory accumulates.

⚠ Wide-grid trap: 50 slots × 1.1% = ±55% sounds safer. It isn't. The script cannot reach the edge, so it never re-anchors.
Coverage — the governing rule

Same market. Same script. Coverage decides everything.

Two example configurations of WaveRunner illustrated against the coverage rule. Outcome depends on user configuration, market conditions, and exchange execution.

Tight coverage allows re-anchors to fire; wide coverage stalls them
TIGHT-COVERAGE EXAMPLE — RE-ANCHORS FIRE

25 slots × 0.61% spread

  • Coverage: ±15.25% — inside the ~20% rule
  • Re-anchor condition: Reachable in normal volatility
  • Cycle behaviour: Active — pairs close at cadence
  • Fee drag floor: 2 × taker / spread
WIDE-COVERAGE EXAMPLE — RE-ANCHORS STALL

50 slots × 1.1% spread

  • Coverage: ±55% — outside the ~20% rule
  • Re-anchor condition: Unreachable in normal volatility
  • Cycle behaviour: Stalled — inventory accumulates
  • Fee drag floor: Lower in theory, but cycles rarely close
Reading your daily report

Four numbers. Glance, don't stare.

The framework prints a report each day. These are the only metrics that matter.

Metric What it is Healthy Watch Act
Re-Anchor Count Times the grid rebuilt itself > 0 after a few weeks 0 for 2+ weeks Stuck at 0 → grid too wide
Pending Half-Cycles Buys waiting for a sell A handful ~ 20 Dozens & growing
Fee Drag % Gross profit eaten by fees < 25% 25% – 35% > 35%
Win Rate (cycles) Cycles closed at gain / total 100%

Less than five minutes a week.

Once it's running, WaveRunner doesn't need much. Here's the maintenance rhythm.

DAILY · FIRST WEEK

Glance at the report.

Verify the script is filling and re-anchoring as expected. After a week, drop to weekly check-ins.

~ 30 sec / day

WEEKLY

Look for two warning signs.

› Pending half-cycles climbing past ~20 and re-anchors not firing — market has drifted, consider a manual reset.

› Fee drag creeping above 35% — widen the spread by 0.1–0.2%, or double order size. Both reduce drag at the same rate.

MONTHLY

Compare to 30 days ago.

Behaviour relative to buy-and-hold varies by regime — grid execution prioritises spread capture on oscillation over directional exposure.

Underperforming in every regime means something needs tuning.

Remember › It's automated, not autonomous. WaveRunner runs the strategy. You run the configuration.

Risk disclosure

Honest about the failure mode.

Grid execution frameworks are not predictive. They have a specific design — capturing the configured spread on oscillation — and a specific failure mode.

Where it works

Choppy, sideways, modestly trending markets — where price oscillates up and down through the same band. Each oscillation can close a configured cycle for the script.

Where it struggles

One-way markets that exhaust the grid. A sustained, fast move in one direction will exhaust the ladder before auto re-anchor catches up. Inventory accumulates that the script cannot immediately offset within the configured spread.

Standard disclaimers

  • Past performance is not indicative of future results. Backtests are illustrative; live conditions differ.
  • Cryptocurrency markets are volatile and can lose value rapidly. Only deploy capital you can afford to have at risk.
  • WaveRunner is non-custodial trading automation software. It does not predict markets, eliminate drawdowns, or guarantee returns. It is a tool for executing user-defined logic on user-controlled exchange accounts.
  • You retain custody and responsibility at all times. The script trades on your own exchange account via API. Restricted features are not available to US persons.
  • Nothing on this page is investment advice. Configuration choices and capital allocation are your decisions.

Frequently Asked Questions

  • What is WaveRunner?

    WaveRunner is a configurable automated grid trading script — implemented in HaasScript — that runs on the HaasOnline platform. It places a ladder of buy orders below the current price and a matching ladder of sell orders above it, then executes each rung when price reaches it. Completed buy-sell pairs capture the configured spread, gross of fees.

    It is designed for choppy, sideways, or modestly trending markets where price oscillates inside a band.

  • How is WaveRunner different from a generic grid bot?

    WaveRunner is a specific implementation with three safety mechanisms built in: anchor-scale safety (orders shrink as price drifts from the anchor), auto re-anchor (the grid rebuilds itself when it becomes one-sided), and a manual reset for when you decide the regime has changed. The framework is opinionated about how to behave when the market drifts — generic grid bots typically aren't.

  • What is the coverage rule?

    slots × spread < ~20%. This is the single most important configuration constraint. It ensures the script can actually reach the edge of its ladder and re-anchor when it needs to. If you exceed it — for example, 50 slots × 1.1% = ±55% — the outer rungs are unreachable in normal volatility. The auto re-anchor cannot fire, and inventory accumulates without offset.

  • What markets does WaveRunner support?

    WaveRunner v1 ships for spot markets on the deep, liquid pairs supported by HaasOnline's connected exchanges (e.g. BTC/USDT). Avoid illiquid markets — slippage chews up the spread, and the spread/fee math the strategy depends on breaks down. Restricted features are not available to US persons.

  • What if my grid gets stuck?

    If your daily report shows pending half-cycles climbing high and the re-anchor count still at zero, the grid is stuck. Trip the manual reset: set Manual Reset = 1, save, wait one tick, set it back to 0. The script cancels every open order, re-anchors at the current price, and rebuilds a fresh ladder.

    Reset does not erase any unrealised loss on inventory you've already bought — that's real. It lets the script resume cycling from the current market price. Then tune the configuration so it doesn't happen again: tighten the spread, or reduce slot count.

  • Does WaveRunner hold custody of my funds?

    No. WaveRunner is non-custodial. It trades on your own exchange account via API keys you control. Your funds remain on your exchange; HaasOnline never holds them. You retain custody and responsibility at all times.

  • Can I lose money running WaveRunner?

    Yes. A sustained one-way move in either direction will exhaust the ladder before the auto re-anchor catches up, and the script will accumulate inventory it cannot immediately offset within the configured spread. Misconfiguration — most commonly violating the coverage rule — also causes inventory to pile up. Past performance is not indicative of future results, and you should only deploy capital you can afford to have at risk.

Ready to deploy? Configure WaveRunner. Run your own backtest.

WaveRunner ships as a HaasScript on the HaasOnline platform. Configure it, validate it on your own backtest, deploy to your own exchange account. Non-custodial; restricted features are not available to US persons.

Start free 7-day trial