WaveTrend_LB

WaveTrend_LB — Status & roadmap

ENGINEERING COMPLETEAudited 2026-09-12· directional engine· gunbot-quant· spot

Where this strategy is today

ENGINEERING COMPLETE — the code is correct, uniform and shippable. That is a statement about engineering, not about profitability; the performance verdict is separate and sits below it.

Dimension State
Correctness 5 / 5 invariants pass
Console output 25 tagged calls, 0 off-format
Side panel 6 rows, padded to the 3-column grid
Chart marks drawn only after the exchange confirms a fill
Palette 8 / 8 canonical
GUI settings 9 exposed · 9 read at runtime · 0 untunable · 0 inert
Deployed to a live install Not yet — audited and staged, not yet shipped

Performance verdict. Over three years on 7 markets it returns a median 1.1% against buy-and-hold's 39.2% — an edge of -46.4% — and is profitable on 4 of 7. On this window it is not a replacement for simply holding the asset, and nothing in these reports claims it is.

What it actually does

LazyBear's WaveTrend oscillator, as a single-position long-only engine. It is either flat or fully committed, with an ATR(50) × 5.51 stop underneath the entry.

The entry and the exit are deliberately asymmetric, and that asymmetry is the whole character of the strategy:

So it waits for a rare, specific reversal setup and then leaves on the first sign the momentum has rolled over. That is why it holds a position only 3.2% of the time.

Read from the shipped strategy source, not from its documentation.

The measured constraint

Time in market is 3.2%, over 334 round trips across all 7 markets and three years. Everything in the performance report rests on that fraction of the bars. A strategy out of the market 97% of the time is not therefore a low-risk one: the 12.2% drawdown happens entirely inside the time it is committed.

Settings, measured

The GUI exposes 9 settings. Which ones this strategy actually reads was measured by running it with a recording config proxy rather than inferred from the source — a directional file bakes 77 keys and only the active mode's branch reads any of them.

What to build next

Ordered by expected effect on the result, not by effort.

1. Loosen the exit before touching the entry

Highest priority

The exit condition is wt1 < wt2 — a state, not an event. It fires on the first bar momentum rolls over, including a one-bar wobble inside an intact move. With entry requiring a cross from below −76.6 and exit requiring almost nothing, the strategy is structurally built to cut early.

This is the cheapest change with the largest expected effect, because it does not touch the part of the strategy that works (the entry is selective and its win rate reaches 54% on XRP). Worth testing, in order: require the down-cross rather than the state; require wt1 < wt2 for two consecutive bars; or require WT1 to have reached a positive threshold first, so the trade is only closed after the move it was waiting for actually happened.

2. Populate the trailing stop the engine already carries

High priority

The sidebar and the chart both read a trailing-stop field, and the chart draws a Trail line whenever it is finite. The WaveTrend branch never sets it — it publishes only an entry, an exit and an info line — so that display is permanently empty and the only protective exit is the fixed ATR stop placed at entry.

A trail would let the strategy hold a winner while the oscillator is noisy, which is the exact failure mode above. The plumbing is already in place on both display surfaces; only the mode branch needs to set the field.

3. Sweep the pyramiding that this audit repaired

High priority

SIG_maxAdds did not work before this audit and is exposed in the Gunbot GUI for the first time. It still ships at the no-op default of 1.

On BTCUSDT 1h, setting it to 3 now takes the strategy from 18 fills to 31 while keeping peak deployment at 100%. That is a materially different strategy and it has not been measured across the full market set — it should be swept over maxAdds 2–4 and addSpacing 0.5–2.0 ATR before any value other than 1 is shipped.

4. Decide what this strategy is for

Worth testing

Over three years it returns a median −8.3% while buy-and-hold returns +39.2%. It is not a substitute for holding, and the one-year ranking that put it first was measuring a bear market.

Where it may still earn its place is as a component: 3.2% exposure means it consumes almost no capital, its drawdown is uncorrelated with a held position for 97% of the time, and it is profitable on the markets where mean-reversion works (LINK +37.5%, XRP +59.9%). Testing it as one sleeve of a portfolio is a fairer question than testing it as a standalone.

5. Do not add a regime filter yet

Read before acting on the others

SIG_useRegime exists in the Directional engine but the WaveTrend branch does not read it — measured, not assumed: the runtime read-set for this mode is atrMult, atrPeriod, maxAdds, n1, n2, wtOs, plus addSpacing and addScale once pyramiding is on. Setting SIG_useRegime on this strategy does nothing.

The 79.7% spread between the best and worst market does suggest regime dependence is real, so the idea is sound — it just requires adding the check to this branch rather than flipping an existing knob.

Operator output, measured

Everything below was read out of the strategy file by the presentation audit, not taken from its documentation. These are the surfaces an operator actually watches: the terminal log, the side panel, the chart, and the settings the GUI offers.

Terminal log
Tagged, aligned, coloured
25
Raw and off-format
0
Exempt (object and error dumps)
7

Every non-exempt line carries the strategy name, an event tag and the palette colour for that tag, so one terminal running many pairs stays readable.

Side panel
Data rows
6
Section headers
1
Rows with no tooltip
0
Padded to the 3-column grid
yes
Chart marks
Model
fill-confirmed

A mark is drawn only once the exchange confirms the fill, so the chart never shows a trade that did not happen.

Colour palette
Non-canonical colours
0

One colour per meaning, identical in the log, the panel and the chart — the eight canonical roles.

Settings the GUI exposes

9 settings appear in the Gunbot strategy editor for this strategy. 9 of them are read at runtime — measured by running the strategy with a recording proxy over its config, not inferred from the source.

SIG_addScaleSIG_addSpacingSIG_atrMultSIG_atrPeriodSIG_maxAddsSIG_maxExposureSIG_n1SIG_n2SIG_wtOs