가상투자 메뉴 기능 구현

This commit is contained in:
Macbook
2026-05-25 06:41:45 +09:00
parent 0cfe7fc84c
commit 8b373b11e3
33 changed files with 3897 additions and 99 deletions
@@ -139,6 +139,39 @@ public class StrategyDslToTa4jAdapter {
};
}
/** 조건 DSL left/right 필드의 현재 봉 수치 (가상투자 UI 표시용) */
public Double readConditionFieldValue(JsonNode cond, BarSeries series,
Map<String, Map<String, Object>> params,
int index, boolean leftSide) {
if (cond == null || cond.isNull() || series == null || index < 0) return null;
if (index >= series.getBarCount()) return null;
String field = leftSide
? cond.path("leftField").asText("NONE")
: cond.path("rightField").asText("NONE");
if (field == null || field.isBlank() || "NONE".equals(field)) return null;
String indType = cond.path("indicatorType").asText("");
int condPeriod = cond.path("period").asInt(-1);
int leftPeriod = cond.path("leftPeriod").asInt(-1);
int rightPeriod = cond.path("rightPeriod").asInt(-1);
int sidePeriod = leftSide ? leftPeriod : rightPeriod;
String registryKey = toRegistryKey(indType);
Map<String, Object> indParams = params != null
? params.getOrDefault(registryKey, Map.of())
: Map.of();
try {
Indicator<Num> ind = resolveField(field, indType, indParams, series, condPeriod, sidePeriod);
Num v = ind.getValue(index);
return v != null ? v.doubleValue() : null;
} catch (Exception e) {
log.debug("[Adapter] field value read fail {}: {}", field, e.getMessage());
return null;
}
}
private Rule buildTimeframeRule(JsonNode node, RuleBuildContext ctx) {
String ct = node.path("candleType").asText("1m");
BarSeries branchSeries = ctx.resolveSeries(ct);