Skip to content
All strategies

Strategies

LTC Hyperliquid vn.py DoubleMaStrategy — Frozen 10/20 SMA Crossover

Outcome: Abandoned

LtcHyperliquidFrozenDoubleMa

Outcome Summary

After three iterations, LtcHyperliquidFrozenDoubleMa evaluated a frozen 10/20 SMA crossover translation with fixed-lot sizing on Hyperliquid four-hour LTC bars. Its 279 closed positions produced a -41.44% return, Sharpe -0.905 and 54.26% maximum drawdown. Backtest review abandoned it for negative expectancy after costs; the frozen contract prohibited parameter optimization, and no verified implementation defect offered a specific repair path.

Hypothesis

Faithful signal-rule translation of DoubleMaStrategy by 用Python的交易员, MIT licensed, from the supplied vn.py source at commit 69dd4922dda8acde095b85a2f0613288e401ff7f. Trade LTCUSD.HYPERLIQUID using 4-hour bars. The source specifies no instrument or backtest interval; these are platform research choices. Preserve fast_window=10, slow_window=20, strict crossings, cancellation on every bar, and separate closing/opening limit orders on reversals. The source submits quantity 1 for every order. For capital-relative platform sizing, explicitly translate that into one fixed research lot sized at initialization to 20% of starting equity, rounded down to instrument precision; keep its quantity unchanged throughout each evaluation window. This sizing translation is a declared departure from literal one-LTC orders. Do not add signal filters, stops, targets, trailing exits or parameter optimization. Performance is unverified.

The submission is executable trading logic, so source fidelity takes precedence over inventing a different mechanism. Hyperliquid is under its 20% venue target at 9.4%, and long-short experiments are underrepresented. Four-hour bars permit substantially longer Hyperliquid validation than sub-hourly bars. corpus_concentration is empty, so LTC's recent corpus share cannot be verified. This remains a conventional crossover experiment with weak novelty; it is justified as a requested source reproduction rather than a newly discovered structural edge.

negative_expectancy: decline optimization of this frozen LTC Hyperliquid 4H 10/20 SMA crossover because the evaluated implementation loses after costs across 279 closed positions. This decision concerns the platform-selected instrument, timeframe, fixed research lot and native limit execution; it does not establish that the original vn.py implementation or SMA crossovers universally fail.

Implementation

Frozen LTC Hyperliquid 4-hour strict 10/20 SMA crossover, with close-price limit orders, cancellation each evaluated bar, and an immutable lot sized from 20% of initialization equity.

Preserves the previous passing signal logic, frozen parameters and bounded fixed-lot sizing. The raw-quantity failure is consistent with the platform's documented corruption from overlapping reduce-only closing and opening limits. The smallest execution change retains separate orders but submits the opening limit only after the closing fill confirms the instrument is flat. This forced adaptation changes simultaneous submission timing; native limit matching also differs from vn.py next-bar matching. No filters, stops, targets or optimization were added. This repair has not been verified. Required reference reads failed because the command sandbox reported bwrap permission denied. Writing the exact required outbox path was attempted and failed; the complete task-bound JSON is returned here.

Verification Results

Align config.provenance.url with the hypothesis's frozen source commit.

The code and hypothesis identify source commit 69dd4922dda8acde095b85a2f0613288e401ff7f, but config.provenance.url identifies commit 5da04d953107c1d54385ffd2aeafd43d8fba0a16. Source provenance is inconsistent.

The sandbox reports average net trade return of -0.4077% across 279 closed positions. This warrants analyst review but does not establish a correctness defect.

Backtest Review

Sharpe
-0.90
Total return
-41.44%
Max drawdown
54.26%
Trades
279
Win rate
38.4%
Profit factor
0.76

279 closed positions over 800 days provide a functioning evaluation. Trade records show 139 longs, 140 shorts and unchanged quantity of 307.976594 LTC, consistent with the declared fixed-lot translation.

Accounting reconciles to approximately $41,445 realized net loss, with no open-position unrealized contribution.

QA's economic concern is borne out: average net trade return is -0.4526% versus the +0.15% Hyperliquid review floor; profit factor is 0.759 and Sharpe is -0.905.

Strategy return is -41.44%, versus buy-and-hold -25.41%. Strategy drawdown is 54.26%; the sampled benchmark curve shows approximately 62.79% drawdown.

The research contract freezes the rules and prohibits parameter optimization. No verified implementation defect provides a specific repair path.

Iteration History

Verification failed (Layer 1.5 — hypothesis/config consistency) [class=hypothesis_mismatch]: - optimization_plan fixes leverage at 1.0

Verification failed (Layer 3 — sandbox backtest): the strategy asked for an order quantity too large for NautilusTrader to represent (the engine aborted with 'exceeds QUANTITY_RAW_MAX'). This is a position-sizing defect in the strategy, not a platform failure. Typical causes: dividing by a price, volatility or stop distance that can be zero or near zero; an unbounded equity, leverage or conviction multiplier; sizing in quote currency (USD) where base units are expected; or a quantity in raw/scaled units. Size from get_account_equity() * self.config.leverage / price, guard every denominator, cap the notional, and build the quantity with the instrument's make_qty(). Engine output: Subprocess backtest exited with code -6: thread '<unnamed>' (2093707) panicked at crates/model/src/types/quantity.rs:193:48: Condition failed: raw value 340282366920938463461990141494068211456 exceeds QUANTITY_RAW_MAX=340282366920929970038656466944 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Verification failed (Layer 3 — sandbox backtest): the strategy asked for an order quantity too large for NautilusTrader to represent (the engine aborted with 'exceeds QUANTITY_RAW_MAX'). This is a position-sizing defect in the strategy, not a platform failure. Typical causes: dividing by a price, volatility or stop distance that can be zero or near zero; an unbounded equity, leverage or conviction multiplier; sizing in quote currency (USD) where base units are expected; or a quantity in raw/scaled units. Size from get_account_equity() * self.config.leverage / price, guard every denominator, cap the notional, and build the quantity with the instrument's make_qty(). Engine output: Subprocess backtest exited with code -6: thread '<unnamed>' (2109114) panicked at crates/model/src/types/quantity.rs:193:48: Condition failed: raw value 340282366920938463461990141494068211456 exceeds QUANTITY_RAW_MAX=340282366920929970038656466944 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Outcome Summary

These results apply to the platform-selected LTC market, timeframe, sizing and execution translation; they do not establish that the original vn.py implementation or SMA crossovers universally fail.

Backtest review issued an abandon verdict for negative expectancy after costs, with no verified implementation defect providing a repair path and parameter optimization prohibited by the frozen research contract. Optimization, post-optimization analysis and risk review were not reached.

Trade LTC on Hyperliquid using frozen 10/20 SMA crossings on four-hour bars, with separate limit orders for reversals and a fixed lot initially sized to 20% of starting equity.

Across 800 days and 279 closed positions, the backtest returned -41.44%, with Sharpe -0.905 and maximum drawdown 54.26%. Average net trade return was -0.4526%, and profit factor was 0.759.

Analysis

DoubleMaStrategy

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