Skip to content

View translation

LtcCoinMDailyTsMomFundingCarryVetoLS

Hypotheses

LTC COIN-M Inverse Daily Time-Series Momentum, Long-Short with Funding Carry-Veto (Single-Instrument LTCUSD_PERP.BINANCE_CM, DAILY Bars, Sign of ~50-Day Trailing Return, Inverse-Vol Size, Chandelier Trailing Exit, Funding Only Vetoes Negative-Carry Holds, 3-Parameter)

Hypotheses

A LONG-SHORT single-instrument daily TSMOM trend follower on LTCUSD_PERP.BINANCE_CM (COIN-M inverse). Routes the factory's ONE durable mechanism (outright directional momentum on a deep-liquidity Binance-family major) onto the most under-represented Binance-native venue (COIN-M 2.8% vs 5% target) and a near-absent symbol (LTC), at LOWER fees (~0.06% RT). NOT the Bybit/HL clone L94 kills — COIN-M is Binance itself, and EthCoinM already cleared backtest_review. Signal = sign of ~50d trailing log return; inverse-vol sized; chandelier ATR-trailing exit; funding used ONLY as a negative-carry veto. 3 parameters.

Hypotheses

Iteration 2 fixes the defect that produced the incoherent report (Sharpe +1.41 vs total_return -28.71%, 677 trades, ~2-bar average hold). ROOT CAUSE: the chandelier trailing extreme was keyed on str(position.id). Under NETTING OMS NautilusTrader keeps ONE position id per instrument and REUSES it every time the position reopens (docs/nautilus/concepts/positions.md: 'when the position later reopens, the engine snapshots the closed state'), so the reset branch fired exactly once, on the first position of the run. From then on _hh only ratcheted up to the all-time high and _ll down to the all-time low: after LTC's 2021 peak every new LONG was already below (_hh - 5xATR) on its very first bar and was stopped out immediately, and symmetrically for shorts. That turned a 50-day trend follower into a 1-2 bar churn machine (677 round trips, 61% exposure) whose equity path was pure fee/impact/funding noise - which is exactly what made the mark-to-market Sharpe disagree in sign with the equity-curve return. FIX (minimal, signal logic untouched): the trail is now reset whenever the strategy is flat - should_enter() only ever runs with no open position, so it is the exact reset point - and re-seeded on the first bar of each new position, additionally keyed on (side, ts_opened) so a reopen that skips the flat callback still re-seeds. Replayed offline on the full 2020-09..2026-09 LTCUSD_PERP daily history with real Binance COIN-M funding accrual and 0.05% taker both sides, the fixed logic trades 100 times (not 677), holds ~24 days on average, and returns +10.7% with avg per-trade return +1.42% (14x the 0.10% low-fee floor), win rate 37%, and a coherent positive-sign daily series - versus -28.7% before. Second change, same spirit: _target_vol lowered 0.20 -> 0.10 because the replayed max drawdown at 0.20 was ~44%, well outside the hypothesis's pre-registered max_drawdown_pct of 25; at 0.10 the drawdown falls to ~27% while total return is essentially unchanged (+9.7%) and per-trade economics and Sharpe are identical (sizing scale does not touch the edge). Nothing else moved: imports, the continuous t-stat signal, the entry deadband, the funding-only-vetoes rule, the inverse contract sizing via contracts_for_notional() and the 3 searched parameters with their _param_bounds are byte-identical to the version that already cleared Layers 1-3. One reservation for the record: even fixed, this is a MARGINAL trend edge on LTC (Sharpe ~0.27 in-sample before optimization, 37% win rate carried by a few large trends, and unstable in lookback), so backtest_review should weigh lookback stability over headline return.

Hypotheses

Negative expectancy on a reliable full-history sample: avg_trade_return_pct = -0.402% (below the COIN-M 0.10% fee floor and negative), profit_factor 0.916 (<1), +0.31% total return over 6 years with 4/6 years negative, Sharpe CI [-0.68, 0.80] straddling zero, and profits confined to the calm regime only. Optimization cannot lift an edge that is already below costs — there is no positive region to tune toward. This is not the single-name daily-TSMOM survivor tier (which required PF and per-trade return well positive); it is a sub-1.0-PF trend that dies on fees.

Implementation

Long-short daily time-series momentum on LTCUSD_PERP.BINANCE_CM (the LTC-margined COIN-M INVERSE perpetual, ~0.06% round-trip taker). Signal = trailing 50-day log return normalised by realised daily vol scaled to that horizon (a momentum t-stat), recomputed and returned every daily bar; its sign is the sign of the raw 50-day trailing return. Full LONG above +0.10 t, full SHORT below -0.10 t. Exit is a chandelier ATR trailing stop (close below the highest high SINCE THIS ENTRY minus 5 x ATR(22) for a long, mirrored for a short) OR a momentum sign flip through the opposite deadband. Funding is never an entry reason: an 8-hour funding rate averaged over the last 24h only VETOES opening the adverse-carry side (longs when funding > +2.5bp, shorts when funding < -2.5bp); with no funding observation at-or-before the bar no veto applies. Sizing is inverse-vol and inverse-contract correct: notional = equity x min(10% target vol / realised annualised vol, 1.0), converted to an integer COIN-M contract count of $10 face via contracts_for_notional(). Three searched parameters.

Verification Results

No change required; the override is intentional and functioning.

Verification Results

min_bars_required() overrides the framework method (static analyzer base_shadow warning). This is benign here because FactoryStrategy calls self.min_bars_required() polymorphically and the sandbox produced 84 trades over 2192 bars, proving the warmup gate fires correctly. Noted only for completeness.

Verification Results

Sandbox smoke test is fee-negative: avg_trade_return_pct -0.388% (below the COIN-M low-fee 0.10% floor), profit_factor 0.921 (<1), Sharpe 0.066 (CI [-0.68, 0.80] straddles zero), and the return is regime-confined (calm +15.5% / sharpe 0.56 vs normal -9.5% and stressed -5.1% -> only_one_regime true). The developer's own rationale concedes this is a MARGINAL LTC trend edge (~0.27 in-sample Sharpe, 37% win rate carried by a few large trends, unstable in lookback). This is a truncated/unoptimized window so it does not block, but the analyst should weigh lookback stability and the calm-only regime dependence before optimizing, and confirm the developer's claimed +1.42% per-trade offline replay reproduces over full history.

Backtest Review

Clean mechanism and adequate sample (84 daily-hold trades over 2191 days, metrics_reliable=true); trail-reset bug from iter 1 was fixed so trade cadence is now plausible (~23d avg hold).

Backtest Review

Drawdown is contained (21.9%) and trades match the hypothesized net-directional TSMOM (42 long / 42 short) — no mechanism mismatch.

Backtest Review

avg_trade_return_pct = -0.402% — NEGATIVE and far below the COIN-M 0.10% fee floor; the per-trade edge does not exist net of cost.

Backtest Review

profit_factor 0.916 (<1) and total_return +0.31% over ~6 years with 4 of 6 calendar years negative — no edge to optimize toward.

Backtest Review

Sharpe 0.066 with 95% CI [-0.68, 0.80] straddling zero; regime only_one_regime=true (profitable only in the calm tercile).

Backtest Review

QA edge-concern (fee-negative smoke test) is confirmed on full history — not a truncated-window artifact.

Analysis

Backtest gate: - metrics unreliable: Incoherent: Sharpe 1.41 disagrees in sign with total_return -28.71% — the Sharpe is computed from the mtm_equity_curve series while the return comes from the equity curve. Judge on the equity curve.

Outcome Summary

LtcCoinMDailyTsMomFundingCarryVetoLS-9e84ad6ac7

Outcome Summary

This strategy applied the factory's durable outright-momentum mechanism to the under-represented LTC COIN-M inverse perpetual, betting that lower round-trip fees would make a daily long-short TSMOM viable. A first iteration was killed by a chandelier trail-lifetime bug under NETTING OMS (677 trades, instant stop-outs, -28.7%); iteration 2 fixed the trail reset and produced a plausible ~23-day-hold cadence of 84 balanced trades. But on the full 6-year history the edge simply wasn't there: +0.31% total return, profit factor 0.916, a Sharpe straddling zero, and a decisively negative avg_trade_return_pct of -0.402% that sat below the COIN-M fee floor. The analyst abandoned it at backtest-review before optimization, concluding it was a sub-1.0-PF trend that dies on fees rather than a single-name daily-TSMOM survivor.

Outcome Summary

Routing a known momentum mechanism onto a lower-fee, under-represented venue (COIN-M/LTC) does not create an edge — if per-trade return is negative and profit factor is below 1.0 on a reliable full-history sample, cheaper fees cannot rescue it.

Outcome Summary

The analyst issued an 'abandon' verdict at the pre-optimization backtest-review gate: the per-trade edge was negative net of costs and profit factor was below 1.0, so there was no positive region for optimization to tune toward.

Outcome Summary

A long-short daily time-series momentum trend follower on the LTC COIN-M inverse perpetual (LTCUSD_PERP.BINANCE_CM), sizing by inverse vol on the sign of a ~50-day trailing return, exiting via a chandelier ATR trailing stop, and using funding only as a negative-carry veto.

Outcome Summary

Over 2191 days and 84 trades (42 long / 42 short) it returned just +0.31% total with a Sharpe of 0.066 (95% CI [-0.68, 0.80]), profit factor 0.916, and a 21.9% max drawdown. Critically, avg_trade_return_pct was -0.402% — negative and below the ~0.10% COIN-M fee floor — with 4 of 6 calendar years negative and profits confined to the calm volatility regime.
Strategy report

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