From a297d838498751f10b460b29652b99dbe588c75f Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 12 Jun 2026 08:29:35 +0000 Subject: [PATCH] fix: Testdaten-Arithmetik im Trump-Cycle-Test (200 Candles = 50h < 60h Hold) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plan-Bug: 300 Candles = 75h > holdHours — Position schloss innerhalb der Testdaten, Tests 1/3/4 erwarteten aber offene Positionen. Implementierung war korrekt. Co-Authored-By: Claude Fable 5 --- docs/plans/2026-06-12-trump-copy-strategy.md | 8 ++++---- src/server/live/trump-cycle.test.ts | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/plans/2026-06-12-trump-copy-strategy.md b/docs/plans/2026-06-12-trump-copy-strategy.md index 63a91ba..72514ca 100644 --- a/docs/plans/2026-06-12-trump-copy-strategy.md +++ b/docs/plans/2026-06-12-trump-copy-strategy.md @@ -695,7 +695,7 @@ const fresh = (): TrumpLiveState => ({ cash: 10_000, positions: [], cursorTs: T0 describe('processTrumpCycle', () => { test('Event → Buy am Open der ersten Candle nach eventTs, 20% Equity', () => { - const candles = new Map([['BTC_USDT' as Pair, flat('BTC_USDT', 300)]]); + const candles = new Map([['BTC_USDT' as Pair, flat('BTC_USDT', 200)]]); const events = [{ id: 1, instrument: 'BTC_USDT' as Pair, eventTs: T0 + M15 + 1 }]; const r = processTrumpCycle(candles, events, fresh(), CFG); expect(r.positions).toHaveLength(1); @@ -721,7 +721,7 @@ describe('processTrumpCycle', () => { }); test('Event verfällt, wenn Pair schon belegt (consumed, kein 2. Trade)', () => { - const candles = new Map([['BTC_USDT' as Pair, flat('BTC_USDT', 300)]]); + const candles = new Map([['BTC_USDT' as Pair, flat('BTC_USDT', 200)]]); const events = [ { id: 1, instrument: 'BTC_USDT' as Pair, eventTs: T0 + 1 }, { id: 2, instrument: 'BTC_USDT' as Pair, eventTs: T0 + M15 + 1 }, @@ -734,8 +734,8 @@ describe('processTrumpCycle', () => { test('maxPositions blockiert, Event verfällt', () => { const cfg = { ...CFG, maxPositions: 1 }; const candles = new Map([ - ['BTC_USDT' as Pair, flat('BTC_USDT', 300)], - ['ETH_USDT' as Pair, flat('ETH_USDT', 300, 50)], + ['BTC_USDT' as Pair, flat('BTC_USDT', 200)], + ['ETH_USDT' as Pair, flat('ETH_USDT', 200, 50)], ]); const events = [ { id: 1, instrument: 'BTC_USDT' as Pair, eventTs: T0 + 1 }, diff --git a/src/server/live/trump-cycle.test.ts b/src/server/live/trump-cycle.test.ts index f47937d..aed40a1 100644 --- a/src/server/live/trump-cycle.test.ts +++ b/src/server/live/trump-cycle.test.ts @@ -20,7 +20,7 @@ const fresh = (): TrumpLiveState => ({ cash: 10_000, positions: [], cursorTs: T0 describe('processTrumpCycle', () => { test('Event → Buy am Open der ersten Candle nach eventTs, 20% Equity', () => { - const candles = new Map([['BTC_USDT' as Pair, flat('BTC_USDT', 300)]]); + const candles = new Map([['BTC_USDT' as Pair, flat('BTC_USDT', 200)]]); const events = [{ id: 1, instrument: 'BTC_USDT' as Pair, eventTs: T0 + M15 + 1 }]; const r = processTrumpCycle(candles, events, fresh(), CFG); expect(r.positions).toHaveLength(1); @@ -46,7 +46,7 @@ describe('processTrumpCycle', () => { }); test('Event verfällt, wenn Pair schon belegt (consumed, kein 2. Trade)', () => { - const candles = new Map([['BTC_USDT' as Pair, flat('BTC_USDT', 300)]]); + const candles = new Map([['BTC_USDT' as Pair, flat('BTC_USDT', 200)]]); const events = [ { id: 1, instrument: 'BTC_USDT' as Pair, eventTs: T0 + 1 }, { id: 2, instrument: 'BTC_USDT' as Pair, eventTs: T0 + M15 + 1 }, @@ -59,8 +59,8 @@ describe('processTrumpCycle', () => { test('maxPositions blockiert, Event verfällt', () => { const cfg = { ...CFG, maxPositions: 1 }; const candles = new Map([ - ['BTC_USDT' as Pair, flat('BTC_USDT', 300)], - ['ETH_USDT' as Pair, flat('ETH_USDT', 300, 50)], + ['BTC_USDT' as Pair, flat('BTC_USDT', 200)], + ['ETH_USDT' as Pair, flat('ETH_USDT', 200, 50)], ]); const events = [ { id: 1, instrument: 'BTC_USDT' as Pair, eventTs: T0 + 1 },