package com.goldenchart.dto; import com.fasterxml.jackson.databind.JsonNode; import lombok.*; import java.util.List; import java.util.Map; /** * 백테스팅 요청 DTO. * *
 * {
 *   "strategyId": 1,                         // DB 전략 ID (선택 — 없으면 dsl 직접 전송)
 *   "buyCondition":  { ...LogicNode },        // 매수 조건 DSL
 *   "sellCondition": { ...LogicNode },        // 매도 조건 DSL
 *   "bars": [ {time, open, high, low, close, volume}, ... ],
 *   "timeframe": "1D",
 *   "indicatorParams": { "CCI": {"length":13}, ... }  // 사용자 설정 파라미터 (선택)
 * }
 * 
*/ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class BacktestRequest { /** DB 저장 전략 ID (선택 — 설정 시 buyCondition/sellCondition 무시) */ private Long strategyId; /** 매수 조건 DSL */ private JsonNode buyCondition; /** 매도 조건 DSL */ private JsonNode sellCondition; /** OHLCV 캔들 데이터 */ private List bars; /** 타임프레임 (1m/5m/15m/30m/1h/4h/1D/1W/1M) */ private String timeframe; /** * 지표 파라미터 오버라이드 (선택). * key = indicatorType (e.g. "CCI"), value = {length:13, ...} * BacktestingService 가 deviceId 기반으로 DB 저장값을 자동 로드하므로 * 보통 생략해도 되며, 명시 시 DB 값 위에 덮어쓴다(우선 적용). */ private Map> indicatorParams; /** 백테스팅 설정 옵션 (선택 — 없으면 기본값 사용) */ private BacktestSettingsDto settings; /** 종목 코드 (결과 저장용, e.g. "KRW-BTC") */ private String symbol; /** 전략 이름 (결과 저장용) */ private String strategyName; /** 디바이스 ID (결과 저장용) */ private String deviceId; }