Skip to content
All strategies

Strategies

Hyperliquid Three-Asset Turtle System Two with Independent Whipsaw Stops

Outcome: Abandoned

HyperliquidThreeAssetTurtleWhipsaw

Outcome Summary

After three iterations, the strategy tested a close-confirmed, bounded-reentry Turtle Whipsaw adaptation across three Hyperliquid assets. It produced 86 closed netted positions but lost 4.67%, with Sharpe -0.215 and profit factor 0.772. Backtest review abandoned the fixed experiment for negative expectancy, so optimization and later reviews were not reached.

Hypothesis

One fixed-parameter experiment adapting the source's 55-day breakout, four-unit pyramiding and independent half-ATR Whipsaw stops to ATOM, NEAR and UNI perpetuals. Trade both directions using completed UTC daily channels and 4-hour execution bars. Each stopped unit can re-enter at its original entry level while its breakout campaign remains active. Source performance claims are unverified. This is an adaptation, not an exact reproduction: execution is close-confirmed, risk is reduced, and re-entry frequency is bounded.

Hyperliquid is underrepresented at 8.5% versus its 20% target, while long-only and single-symbol experiments are overrepresented. Corpus concentration is empty, so no claim of symbol-level novelty is possible. Local catalog directories contain daily and 4-hour parquet files for all three instruments; exact historical coverage still requires validation. The substantive distinction from failed 20/10 Turtle ports is the source's independent Whipsaw unit lifecycle and re-entry mechanism, combined with actual 55-day channels rather than 55 execution bars. This remains a trend-family experiment with a weak prior after earlier Turtle failures; a negative fixed-rule result should close this framing without parameter rescue.

negative_expectancy: decline optimization of this fixed three-asset Turtle Whipsaw adaptation because measured execution loses after costs across 86 closed netted positions, with PF 0.772 and average closed-position return -2.588% against the +0.15% review floor. This rejects the specified ATOM/NEAR/UNI close-confirmed, bounded-reentry experiment, not the original Turtle system or trend following generally. It does not establish that every alternative parameter configuration lacks an edge.

Implementation

Turtle System Two on ATOM, NEAR and UNI Hyperliquid perps. Entries use 55-day completed UTC daily breakouts confirmed on 4-hour closes, with up to 4 units pyramided every 0.5 frozen ATR. Each unit has its own 0.5-ATR Whipsaw stop and may re-enter at its original level while the campaign stays active. Campaigns end on a 20-day opposite-channel close or after 90 days.

Iteration 3 changes only order accounting, as QA asked; signal, entry, sizing and risk caps are unchanged. A superseded stop is no longer forgotten when its cancel is requested. Its client order ID stays in a per-unit scalar string, u{slot}_pending_stops, until a terminal event arrives: a cancel acknowledgement, fill, reject, expiry, or a cancel-reject on a closed order. Fills from those pending stops are deducted from the unit's quantity. After a partial entry fill, the replacement stop is placed (by _protect) only once all older stops are finished, and it covers the unit's reconciled remaining quantity, so it cannot overlap them or cut into other units. Campaign-close exits for a unit are held back until that unit has no pending stops, so the market exit sizes against the quantity actually left after a stop fill that raced the cancel. New handlers for cancel, expiry and cancel-reject either re-protect the unit or continue the campaign close. The 'closing' wind-down also waits on pending and live stop IDs.

Verification Results

The sandbox reports negative net returns and a low win rate. Assess the fixed rules over full history; these smoke-test results do not establish a correctness defect. Netting-account closed-position statistics aggregate unit lifecycles, so they should not be interpreted as individual Whipsaw-unit returns.

Backtest Review

Sharpe
-0.21
Total return
-4.67%
Max drawdown
14.61%
Trades
86
Win rate
8.1%
Profit factor
0.77

The strategy functions across all three assets: 86 closed netted positions, including 35 longs and 51 shorts. Code implements daily breakout channels, pyramiding and independent unit stops; sampled trades show both short stop-outs and extended short campaigns.

Accounting reconciles, all positions finish closed, and audited OHLCV inputs have no missing bars.

Measured net loss is $4,669.90 (-4.67%), with PF 0.772 and Sharpe -0.215. Reported average closed-position return is -2.588%, below the +0.15% Hyperliquid review floor; these aggregates are not individual Whipsaw-unit returns.

Detail records attribute net PnL of +$1,044.60 to ATOM, -$4,038.26 to NEAR and -$1,676.24 to UNI. Portfolio losses persist even when reported commission and impact costs are added back.

QA's economic concern is borne out by full-history results. The registered experiment has no tunable parameters and no verified correctness defect supporting developer iteration.

The supplied benchmark is marked non-meaningful; buy-and-hold underperformance is not used as a rejection reason.

Iteration History

Verification failed (Layer 3 — sandbox backtest): Invalid `value` for quantity: 1.4210854715202004E-14 was rounded to zero due to size increment 0.00000001 and size precision 8 Bar type used: ATOMUSD.HYPERLIQUID-4-HOUR-LAST-EXTERNAL, Bars processed: 0 Ensure your strategy produces trades with the given data and parameters.

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox reports negative expectancy after costs. This is advisory; full-history evaluation should assess the fixed rules after order accounting is corrected. - [critical] _cancel_stop immediately clears the stop order ID after requesting cancellation. Cancellation is asynchronous: the old stop can fill before cancellation completes. on_order_filled then cannot identify that fill, so the unit quantity remains overstated. During……Show moreShow less

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox reports negative expectancy after costs. This is advisory; full-history evaluation should assess the fixed rules after order accounting is corrected. - [critical] _cancel_stop immediately clears the stop order ID after requesting cancellation. Cancellation is asynchronous: the old stop can fill before cancellation completes. on_order_filled then cannot identify that fill, so the unit quantity remains overstated. During partial-entry protection replacement, a replacement stop can consequently reduce other units in the netted position; during campaign closure, market exits can be submitted against quantities already stopped. reduce_only prevents opening an opposite position but does not preserve independent-unit accounting. (line 171) — fix: Retain an order-ID-to-unit mapping for every outstanding and cancel-pending stop until its terminal event is processed. Account for fills from superseded stops, reconcile replacement protection and pending exits against the remaining unit quantity, and handle cancellation acknowledgments explicitly. Verify stop fills racing with replacement and campaign-close cancellation.

Retain an order-ID-to-unit mapping for every outstanding and cancel-pending stop until its terminal event is processed. Account for fills from superseded stops, reconcile replacement protection and pending exits against the remaining unit quantity, and handle cancellation acknowledgments explicitly. Verify stop fills racing with replacement and campaign-close cancellation.

_cancel_stop immediately clears the stop order ID after requesting cancellation. Cancellation is asynchronous: the old stop can fill before cancellation completes. on_order_filled then cannot identify that fill, so the unit quantity remains overstated. During partial-entry protection replacement, a replacement stop can consequently reduce other units in the netted position; during campaign closure, market exits can be submitted against quantities already stopped. reduce_only prevents opening an opposite position but does not preserve independent-unit accounting.

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox reports negative net expectancy. This is advisory; full-history performance belongs to the analyst. Funding cash flows were not modeled. - [critical] Canceled or expired campaign-exit orders never clear their exit_oid. Both terminal handlers call _terminal_stop(), which handles only protective stops. Hyperliquid market orders execute as IOC limit orders, so a partially filled exit can terminate with quantity remaining.……Show moreShow less

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] The sandbox reports negative net expectancy. This is advisory; full-history performance belongs to the analyst. Funding cash flows were not modeled. - [critical] Canceled or expired campaign-exit orders never clear their exit_oid. Both terminal handlers call _terminal_stop(), which handles only protective stops. Hyperliquid market orders execute as IOC limit orders, so a partially filled exit can terminate with quantity remaining. That unit then has no protective stop, while its stale exit_oid prevents _close_campaign() from submitting another exit and keeps the campaign permanently busy. — fix: Handle cancellation and expiry for entry and exit IDs as well as stop IDs. Clear terminal exit IDs, reconcile remaining quantity, and promptly resume campaign liquidation. Verify partial-fill-then-cancel and partial-fill-then-expire sequences. - [critical] When a protective stop is rejected or denied, _failed_order() clears its ID and sets closing=True but submits no liquidation. The position remains unprotected until the next synchronized portfolio decision, potentially four hours later or longer if a leg's feed is missing. This defeats the independent half-ATR protection. — fix: Immediately initiate campaign liquidation after a protective-stop rejection or denial, with bounded retry handling for failed liquidation orders. Verify that liquidation starts without another bar arriving. - [critical] _update() does not reliably invalidate daily indicators after gaps. At an incomplete midnight close it clears history and ATR but leaves ready and channel values computed before the reset, allowing _manage() to use stale channels on that bar. Entire missing UTC days are also undetected because the day-change branch bypasses the timestamp-gap check; the channel can therefore represent 55 observed days spanning more than 55 calendar days. — fix: Detect discontinuities before calculating readiness or channels, invalidate readiness and channel values immediately, and rebuild consecutive complete daily history before permitting new entries. Continue managing existing protective stops during recovery.

Outcome Summary

This fixed adaptation failed economically, but its results do not establish that the original Turtle system or alternative parameter configurations lack an edge.

Backtest review voted to abandon for negative expectancy and returns below the +0.15% review floor; losses persisted even after adding back reported commission and impact costs. The fixed experiment had no tunable parameters or verified correctness defect supporting iteration, and optimization and later reviews were not reached.

Capture long and short trends in ATOM, NEAR and UNI Hyperliquid perpetuals using 55-day breakouts, four-unit pyramiding, independent half-ATR stops and bounded re-entry.

The backtest returned -4.67% across 86 closed netted positions, with Sharpe -0.215, profit factor 0.772 and maximum drawdown 14.61%. Average closed-position return was -2.588%; these aggregates do not represent individual Whipsaw-unit returns.

Analysis

海龟系统交易法则之技术精华

Backtest and paper results are hypothetical. Trading involves risk of loss.