Track replay position state across cycles

This commit is contained in:
Codex
2026-06-26 22:17:48 +08:00
parent 4e5f49d6fe
commit dad6b831b4
9 changed files with 295 additions and 30 deletions
@@ -4,6 +4,7 @@ import com.quantai.trader.enums.PositionSide;
import com.quantai.trader.enums.TraderActionType;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Map;
@Component
@@ -23,7 +24,7 @@ public class TraderActionFactory {
side,
finalAction.increasesExposure() ? pmDecision.pricePlanId() : null,
finalAction.increasesExposure() ? pmDecision.pricePlanConfigHash() : null,
finalAction == TraderActionType.OPEN_LONG || finalAction == TraderActionType.OPEN_SHORT ? pmDecision.targetPositionRatio() : pmDecision.addRatio(),
ratioFor(finalAction, pmDecision),
null,
pmDecision.stopPrice(),
pmDecision.targetPrice(),
@@ -33,6 +34,15 @@ public class TraderActionFactory {
Map.of("riskAllowed", riskDecision.allowAction()));
}
private BigDecimal ratioFor(TraderActionType action, TraderPositionManagerDecision pmDecision) {
return switch (action) {
case OPEN_LONG, OPEN_SHORT -> pmDecision.targetPositionRatio();
case ADD_LONG, ADD_SHORT -> pmDecision.addRatio();
case REDUCE_LONG, REDUCE_SHORT -> pmDecision.reduceRatio();
case WAIT, HOLD, CLOSE_LONG, CLOSE_SHORT, MOVE_STOP, CANCEL -> null;
};
}
private PositionSide sideFor(TraderActionType action, PositionSide pmSide) {
return switch (action) {
case OPEN_LONG, ADD_LONG, REDUCE_LONG, CLOSE_LONG -> PositionSide.LONG;