goldenChat base source add

This commit is contained in:
aidev
2026-05-23 15:11:48 +09:00
commit a4ea7762b5
2081 changed files with 1155760 additions and 0 deletions
@@ -0,0 +1,133 @@
package com.goldenchart.entity;
import jakarta.persistence.*;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 백테스팅 설정 엔티티.
* Ta4j 의 비용 모델·손절/익절/트레일링 스탑·진입가격·재진입 규칙 등을 저장.
*/
@Entity
@Table(name = "gc_backtest_settings")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder
public class GcBacktestSettings {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "device_id", length = 100)
private String deviceId;
// ── 자본 설정 ──────────────────────────────────────────────────────────────
@Column(name = "initial_capital", nullable = false, precision = 20, scale = 2)
@Builder.Default
private BigDecimal initialCapital = new BigDecimal("10000000.00");
// ── 비용 모델 ──────────────────────────────────────────────────────────────
/** LINEAR | ZERO */
@Column(name = "commission_type", nullable = false, length = 20)
@Builder.Default
private String commissionType = "LINEAR";
@Column(name = "commission_rate", nullable = false, precision = 8, scale = 5)
@Builder.Default
private BigDecimal commissionRate = new BigDecimal("0.00150");
@Column(name = "slippage_rate", nullable = false, precision = 8, scale = 5)
@Builder.Default
private BigDecimal slippageRate = new BigDecimal("0.00050");
// ── 진입/청산 가격 ─────────────────────────────────────────────────────────
/** CLOSE | NEXT_OPEN */
@Column(name = "entry_price_type", nullable = false, length = 20)
@Builder.Default
private String entryPriceType = "CLOSE";
/** CLOSE | NEXT_OPEN */
@Column(name = "exit_price_type", nullable = false, length = 20)
@Builder.Default
private String exitPriceType = "CLOSE";
// ── 포지션 방향 ────────────────────────────────────────────────────────────
/** LONG | SHORT | BOTH */
@Column(name = "position_direction", nullable = false, length = 10)
@Builder.Default
private String positionDirection = "LONG";
// ── 거래 규모 ──────────────────────────────────────────────────────────────
/** CAPITAL_PCT | FIXED_AMOUNT */
@Column(name = "trade_size_type", nullable = false, length = 20)
@Builder.Default
private String tradeSizeType = "CAPITAL_PCT";
@Column(name = "trade_size_value", nullable = false, precision = 10, scale = 4)
@Builder.Default
private BigDecimal tradeSizeValue = new BigDecimal("100.0000");
// ── 손절 ───────────────────────────────────────────────────────────────────
@Column(name = "stop_loss_enabled", nullable = false)
@Builder.Default
private Boolean stopLossEnabled = false;
@Column(name = "stop_loss_pct", nullable = false, precision = 6, scale = 3)
@Builder.Default
private BigDecimal stopLossPct = new BigDecimal("2.000");
// ── 익절 ───────────────────────────────────────────────────────────────────
@Column(name = "take_profit_enabled", nullable = false)
@Builder.Default
private Boolean takeProfitEnabled = false;
@Column(name = "take_profit_pct", nullable = false, precision = 6, scale = 3)
@Builder.Default
private BigDecimal takeProfitPct = new BigDecimal("5.000");
// ── 트레일링 스탑 ──────────────────────────────────────────────────────────
@Column(name = "trailing_stop_enabled", nullable = false)
@Builder.Default
private Boolean trailingStopEnabled = false;
@Column(name = "trailing_stop_pct", nullable = false, precision = 6, scale = 3)
@Builder.Default
private BigDecimal trailingStopPct = new BigDecimal("2.000");
// ── 재진입 제어 ────────────────────────────────────────────────────────────
@Column(name = "reentry_wait_bars", nullable = false)
@Builder.Default
private Integer reentryWaitBars = 0;
@Column(name = "max_open_trades", nullable = false)
@Builder.Default
private Integer maxOpenTrades = 1;
// ── 포지션 종속성 모드 ─────────────────────────────────────────────────────
/** LONG_ONLY | SIGNAL_ONLY */
@Column(name = "position_mode", nullable = false, length = 20)
@Builder.Default
private String positionMode = "LONG_ONLY";
// ── 분할 청산 ──────────────────────────────────────────────────────────────
@Column(name = "partial_exit_enabled", nullable = false)
@Builder.Default
private Boolean partialExitEnabled = false;
@Column(name = "partial_exit_pct", nullable = false, precision = 6, scale = 3)
@Builder.Default
private BigDecimal partialExitPct = new BigDecimal("50.000");
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@PrePersist
protected void onCreate() { createdAt = updatedAt = LocalDateTime.now(); }
@PreUpdate
protected void onUpdate() { updatedAt = LocalDateTime.now(); }
}