Rewrite trader service for V4 P0
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package com.quantai.trader.artifact;
|
||||
|
||||
import com.quantai.trader.domain.TraderPmConfig;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public record TraderArtifactBundle(
|
||||
String modelBundleVersion,
|
||||
String calibrationBundleVersion,
|
||||
String pmConfigVersion,
|
||||
String bundleHashSha256,
|
||||
Set<String> providedModels,
|
||||
TraderPmConfig pmConfig
|
||||
) {
|
||||
public TraderArtifactBundle {
|
||||
if (providedModels == null || !providedModels.containsAll(Set.of("DIRECTION", "ENTRY", "CONTINUE", "EXIT", "RISK"))) {
|
||||
throw new IllegalArgumentException("artifact bundle must provide all five V4 models");
|
||||
}
|
||||
pmConfig = java.util.Objects.requireNonNull(pmConfig, "pmConfig is required");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.quantai.trader.artifact;
|
||||
|
||||
import com.quantai.trader.config.TraderProperties;
|
||||
import com.quantai.trader.domain.TraderException;
|
||||
import com.quantai.trader.domain.TraderPmConfig;
|
||||
import com.quantai.trader.enums.TraderErrorCode;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Set;
|
||||
|
||||
@Component
|
||||
public class TraderArtifactLoader {
|
||||
private static final Logger log = LoggerFactory.getLogger(TraderArtifactLoader.class);
|
||||
|
||||
private final TraderProperties properties;
|
||||
|
||||
public TraderArtifactLoader(TraderProperties properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
public TraderArtifactBundle loadActiveBundle() {
|
||||
TraderProperties.Artifact artifact = properties.artifact();
|
||||
if (artifact.modelBundleVersion().isBlank()
|
||||
|| artifact.calibrationBundleVersion().isBlank()
|
||||
|| artifact.pmConfigVersion().isBlank()) {
|
||||
throw new TraderException(TraderErrorCode.TRADER_MODEL_ARTIFACT_MISSING,
|
||||
"model/calibration/pm version is required");
|
||||
}
|
||||
TraderArtifactBundle bundle = deterministicP0Bundle(artifact);
|
||||
log.info("event=trader.artifact.loaded modelBundleVersion={} calibrationBundleVersion={} pmConfigVersion={} providedModels={}",
|
||||
bundle.modelBundleVersion(), bundle.calibrationBundleVersion(), bundle.pmConfigVersion(), bundle.providedModels());
|
||||
return bundle;
|
||||
}
|
||||
|
||||
private TraderArtifactBundle deterministicP0Bundle(TraderProperties.Artifact artifact) {
|
||||
TraderPmConfig pmConfig = new TraderPmConfig(
|
||||
artifact.pmConfigVersion(),
|
||||
new TraderPmConfig.OpenRuleConfig(
|
||||
new BigDecimal("0.58"), new BigDecimal("0.58"),
|
||||
new BigDecimal("0.55"), new BigDecimal("0.55"),
|
||||
new BigDecimal("0.45"), new BigDecimal("1.0"),
|
||||
new BigDecimal("0.03"), new BigDecimal("0.10"), new BigDecimal("0.80")),
|
||||
new TraderPmConfig.AddRuleConfig(
|
||||
new BigDecimal("0.60"), new BigDecimal("0.60"),
|
||||
new BigDecimal("0.58"), new BigDecimal("0.55"), new BigDecimal("0.45"),
|
||||
new BigDecimal("0.45"), new BigDecimal("0.50"),
|
||||
new BigDecimal("1.0"), BigDecimal.ZERO, new BigDecimal("0.10"),
|
||||
new BigDecimal("500"), 3, 5),
|
||||
new TraderPmConfig.ExitRuleConfig(
|
||||
new BigDecimal("0.70"), new BigDecimal("0.70"), new BigDecimal("0.70"),
|
||||
new BigDecimal("0.25"), new BigDecimal("0.62"),
|
||||
new BigDecimal("0.35"), new BigDecimal("0.70"),
|
||||
new BigDecimal("5.0"), new BigDecimal("80")),
|
||||
new TraderPmConfig.SizingConfig(
|
||||
new BigDecimal("0.80"), new BigDecimal("0.05"), BigDecimal.ONE,
|
||||
new BigDecimal("0.02"), new BigDecimal("0.25"), BigDecimal.ONE,
|
||||
new BigDecimal("1.0"), new BigDecimal("80"),
|
||||
new BigDecimal("0.20"), new BigDecimal("0.50"), new BigDecimal("500"))
|
||||
);
|
||||
return new TraderArtifactBundle(
|
||||
artifact.modelBundleVersion(),
|
||||
artifact.calibrationBundleVersion(),
|
||||
artifact.pmConfigVersion(),
|
||||
"deterministic-p0-fixture",
|
||||
Set.of("DIRECTION", "ENTRY", "CONTINUE", "EXIT", "RISK"),
|
||||
pmConfig);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user