Initial quant trader service baseline

This commit is contained in:
Codex
2026-06-23 22:09:06 +08:00
commit 7ff786f658
137 changed files with 6664 additions and 0 deletions
@@ -0,0 +1,50 @@
package com.quantai.trader.evidence;
import com.quantai.trader.TestFixtures;
import com.quantai.trader.domain.StageDecision;
import com.quantai.trader.domain.TraderEvidence;
import com.quantai.trader.persistence.TraderEvidenceRepository;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
class EvidenceAppenderTest {
@Test
void appendsBlockingEvidenceToRepository() {
CapturingEvidenceRepository repository = new CapturingEvidenceRepository();
EvidenceAppender appender = new EvidenceAppender(repository);
appender.append(
TestFixtures.cycle(com.quantai.trader.enums.TraderState.CONTEXT_CHECK),
"CONTEXT_GATE",
StageDecision.block("DATA_MISSING", "TRADER_DATA_QUALITY_FAILED")
);
assertThat(repository.findByCycleId("trader_run_test", "trader_cycle_test"))
.singleElement()
.satisfies(evidence -> {
assertThat(evidence.pass()).isFalse();
assertThat(evidence.blocker()).isEqualTo("TRADER_DATA_QUALITY_FAILED");
});
}
private static class CapturingEvidenceRepository implements TraderEvidenceRepository {
private final List<TraderEvidence> evidence = new ArrayList<>();
@Override
public void insert(TraderEvidence evidence) {
this.evidence.add(evidence);
}
@Override
public List<TraderEvidence> findByCycleId(String runId, String cycleId) {
return evidence.stream()
.filter(item -> item.runId().equals(runId) && item.cycleId().equals(cycleId))
.toList();
}
}
}