Files
goldenChart/매매전략조건.md
T
2026-06-12 09:08:44 +09:00

541 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 매매전략 조건 — Ta4j 지원 × 투자전략 DSL 가용 목록
goldenChart **투자전략 DSL**에서 실제로 선택·평가 가능한 지표와 조건을 **매수 / 매도 / 횡보 필터링** 관점으로 정리한 문서입니다.
> **평가 원천:** 백엔드 `StrategyDslToTa4jAdapter`가 DSL JSON → Ta4j `Rule`로 변환하여 백테스트·실시간 시그널을 생성합니다.
> **관련 문서:** [전략편집기 로직 및 동작흐름.md](./전략편집기%20로직%20및%20동작흐름.md), [백테스팅 시그널 동작방식.md](./백테스팅%20시그널%20동작방식.md)
---
## 1. DSL 구조 요약
### 1.1 논리 트리 노드
| 노드 타입 | 역할 | 예시 |
|-----------|------|------|
| `AND` | 모든 자식 조건 동시 충족 | 추세 + 모멘텀 + 거래량 동시 확인 |
| `OR` | 자식 중 하나만 충족 | RSI 과매도 **또는** 볼린저 하단 터치 |
| `NOT` | 자식 조건의 반대 | `NOT(ADX ≥ 25)` → 횡보 구간만 |
| `TIMEFRAME` | 특정 분봉에서만 평가 | `[3m]` MA 크로스 |
| `CONDITION` | 단일 지표 비교 | `RSI_VALUE CROSS_UP OVERSOLD_30` |
### 1.2 공통 조건 연산자 (`COMMON_CONDITIONS`)
모든 일반 지표(밴드·오실레이터·거래량 등)에 공통 적용됩니다.
| 조건 코드 | UI 라벨 | Ta4j Rule | 의미 |
|-----------|---------|-----------|------|
| `GT` | 초과(>) | `OverIndicatorRule` | 좌 > 우 |
| `LT` | 미만(<) | `UnderIndicatorRule` | 좌 < 우 |
| `GTE` | 이상(≥) | Over Equal | 좌 ≥ 우 |
| `LTE` | 이하(≤) | Under Equal | 좌 ≤ 우 |
| `EQ` | 같음(=) | epsilon Equal | 좌 ≈ 우 |
| `NEQ` | 다름(≠) | Not Equal | 좌 ≠ 우 |
| `CROSS_UP` | 상향 돌파 | `CrossedUpIndicatorRule` | **직전 봉** 좌≤우 → **현재 봉** 좌>우 |
| `CROSS_DOWN` | 하향 돌파 | `CrossedDownIndicatorRule` | **직전 봉** 좌≥우 → **현재 봉** 좌<우 |
| `SLOPE_UP` | 상승 중 | `IsRisingRule` | `slopePeriod`(기본 3) 구간 연속 상승 |
| `SLOPE_DOWN` | 하락 중 | `IsFallingRule` | `slopePeriod` 구간 연속 하락 |
| `DIFF_GT` | 차이>값 | abs(좌−우) > `compareValue` | 두 선 간격이 임계값 초과 |
| `DIFF_LT` | 차이<값 | abs(좌−우) < `compareValue` | 두 선 간격이 임계값 미만 |
| `HOLD_N_DAYS` | N일 유지 | N봉 연속 Over | 좌>우가 `holdDays`(기본 3)봉 유지 |
**교차(`CROSS_*`) 주의:** 해당 **봉 종가(확정 봉) 기준 1봉**만 true입니다. 차트 SMA·백테스트 MA 기간·워밍업 봉 수가 다르면 교차 시점이 어긋날 수 있습니다.
### 1.3 일목균형표 전용 조건 (`ICHIMOKU`만)
| 조건 코드 | 의미 |
|-----------|------|
| `ABOVE_CLOUD` | 종가 > max(선행1, 선행2) — 구름 위 |
| `BELOW_CLOUD` | 종가 < min(선행1, 선행2) — 구름 아래 |
| `IN_CLOUD` | 종가가 구름대 내부 |
| `CLOUD_BREAK_UP` | 종가가 구름 상단 상향 돌파 |
| `CLOUD_BREAK_DOWN` | 종가가 구름 하단 하향 이탈 |
| `SPAN1_GT_SPAN2` / `SPAN1_LT_SPAN2` | 선행1 vs 선행2 크기 비교 |
| `SPAN1_CROSS_UP_SPAN2` / `SPAN1_CROSS_DOWN_SPAN2` | 선행1↔선행2 교차 |
| `LAGGING_GT_PRICE` / `LAGGING_LT_PRICE` | 후행스팬 vs 종가 |
일목은 위 전용 조건 **+** 공통 조건(전환선↔기준선 `CROSS_UP` 등) 모두 사용 가능합니다.
### 1.4 복합지표 (2기간 교차)
팔레트 **「복합지표」** 탭에서 동일 지표의 **단기·장기 두 값**을 비교합니다.
| 지표 | 좌/우 필드 예 | 용도 |
|------|---------------|------|
| DONCHIAN | `DC_UPPER_9``DC_UPPER_20` | 단기·장기 채널 비교 |
| RSI | `RSI_VALUE_9``RSI_VALUE_18` | RSI 기간 교차 |
| CCI, ADX, Williams %R, TRIX, VR | `*_VALUE_{기간}` | 기간별 강도 비교 |
| PSYCHOLOGICAL, INVEST_PSYCHOLOGICAL | `PSY_VALUE_{n}` | 심리도 기간 교차 |
| DISPARITY | `DISPARITY5``DISPARITY20` | 단기·중기 이격도 |
요소1·요소2 각각 **별도 TIMEFRAME**(leftCandleType / rightCandleType) 지정 가능 — 멀티 TF 교차 조건.
### 1.5 DSL 지원 지표 전체 목록
#### 밴드·추세 (MA_BAND / 밴드 팔레트)
| DSL 타입 | Ta4j / 차트 | 비고 |
|----------|-------------|------|
| `MA` | `SMAIndicator` | `MA{n}` = n봉 단순이동평균 (SMA 설정 period1~11 반영) |
| `EMA` | `EMAIndicator` | `EMA{n}` |
| `BOLLINGER` | `BollingerBands*` | 상·중·하단밴드, 종가 비교 |
| `DONCHIAN` | `DonchianChannel*` | `DC_UPPER/Lower/MIDDLE_{9,10,20,55}` |
| `NEW_HIGH` | `PreviousValueIndicator` + 최고가 | `NH_PRIOR_{n}` 직전 n봉 최고가 |
| `NEW_LOW` | `PreviousValueIndicator` + 최저가 | `NL_PRIOR_{n}` 직전 n봉 최저 |
| `ICHIMOKU` | `Ichimoku*Indicator` | 전환·기준·선행·후행 + 구름 조건 |
#### 오실레이터·모멘텀 (보조지표 팔레트)
| DSL 타입 | Ta4j 클래스 | 기본 파라미터(편집기) |
|----------|-------------|----------------------|
| `RSI` | `RSIIndicator` | length 9 (차트 설정 상속 가능) |
| `MACD` | `MACDIndicator` + EMA signal | 12 / 26 / 9 |
| `CCI` | `CciOnSourceIndicator` | 13 |
| `ADX` | `ADXIndicator` | diLength 14, adxSmoothing 14 |
| `DMI` | `PlusDIIndicator` / `MinusDIIndicator` | diLength 14 |
| `STOCHASTIC` | Slow %K, %D (SMA smoothing) | k 12, smooth 3, d 5 |
| `WILLIAMS_R` | `WilliamsRIndicator` | 14 |
| `TRIX` | 3×EMA ROC% + signal EMA | 12 / signal 9 |
| `OBV` | `OnBalanceVolumeIndicator` + MA | maLength 9 |
| `VR` | 커스텀 VR | length 10 |
| `DISPARITY` | (종가/MA1)×100 | ultra 5, short 10, mid 20 |
| `PSYCHOLOGICAL` | 상승일 비율 | 12 |
| `NEW_PSYCHOLOGICAL` | 신심리도 | 10 |
| `INVEST_PSYCHOLOGICAL` | 투자심리도 | 10 |
| `VOLUME` | `VolumeIndicator` vs SMA | MA 20 |
| `BWI` | `BollingerBandWidthIndicator` (차트) | ⚠️ **DSL 어댑터 미구현** (§7 참고) |
| `VOLUME_OSC` | Volume EMA 차이 % (차트) | ⚠️ **DSL 어댑터 미구현** (§7 참고) |
#### 가격 필드 (여러 지표에서 좌·우 operand로 사용)
`CLOSE_PRICE`, `OPEN_PRICE`, `HIGH_PRICE`, `LOW_PRICE`, `VOLUME_VALUE`, `VOLUME_MA`
#### 임계값(hline) 필드
편집기에서 `HL_OVER`(과열), `HL_MID`(중앙), `HL_UNDER`(침체) 또는 `K_{숫자}` 직접 입력.
| 지표 | HL_OVER | HL_MID | HL_UNDER |
|------|---------|--------|----------|
| RSI | 70 | 50 | 30 |
| Stochastic | 80 | 50 | 20 |
| CCI | 100 | 0 | -100 |
| Williams %R | -20 | -50 | -80 |
| ADX | 40 | **25** | 20 |
| BWI | 80 | 50 | 20 |
| VR | 200 | 100 | 50 |
| PSYCHOLOGICAL | 75 | 50 | 25 |
| NEW_PSYCHOLOGICAL | 50 | 0 | -50 |
| INVEST_PSYCHOLOGICAL | 75 | 50 | 25 |
| DISPARITY | 105 | 100 | 95 |
| MACD / TRIX / VOLUME_OSC | — | 0 | — |
---
## 2. 매수(BUY) 조건 — 지표별 활용
매수 조건은 `buyCondition` 트리에 설정합니다. 아래는 **전략 편집기 템플릿·일반적 패턴**과 **추천 조건 조합**입니다.
### 2.1 추세 추종 — 이동평균·밴드
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| MA 골든크로스 | `MA` `CROSS_UP` `MA10``MA20` | 단기 SMA가 장기 SMA 상향 돌파 |
| 종가 > 장기선 | `MA` `CROSS_UP` `CLOSE_PRICE``MA60` | 가격이 장기 추세선 회복 |
| EMA 단기 > EMA 장기 | `EMA` `GT` `EMA5``EMA20` | 지수이동평균 정배열 진입 |
| 볼린저 하단 반등 | `BOLLINGER` `CROSS_UP` `CLOSE_PRICE``LOWER_BAND` | 하단밴드 터치 후 종가 회복 |
| 볼린저 중심선 돌파 | `BOLLINGER` `CROSS_UP` `CLOSE_PRICE``MIDDLE_BAND` | 박스 상단(중심) 돌파 |
| 이격도 과매도 탈출 | `DISPARITY` `CROSS_UP` `DISPARITY20``OVERSOLD_95` | 20일선 대비 -5% 이하에서 반등 |
| 이격도 중립 회복 | `DISPARITY` `CROSS_UP` `DISPARITY10``NEUTRAL_100` | 단기 이격 100% 회복 |
**MA 필드 규칙:** UI의 `MA2(10일)` = DSL `MA10` = **10봉 SMA**. SMA 차트 설정(period1~11)과 전략 편집기 `maLines`가 일치해야 차트·백테스트 값이 맞습니다.
### 2.2 모멘텀·오실레이터 — 과매도 반등
| 패턴 | DSL 예시 | Ta4j |
|------|----------|------|
| RSI 과매도 | `RSI` `LTE` `RSI_VALUE``OVERSOLD_30` | `RSIIndicator` ≤ 30 |
| RSI 과매도 **탈출** | `RSI` `CROSS_UP` `RSI_VALUE``OVERSOLD_30` | 30선 상향 돌파 (반등 확인) |
| Stochastic 골든크로스 | `STOCHASTIC` `CROSS_UP` `STOCH_K``STOCH_D` | Slow %K > %D 교차 |
| Stochastic 과매도 | `STOCHASTIC` `LTE` `STOCH_K``OVERSOLD_20` | %K ≤ 20 |
| MACD 상향 돌파 | `MACD` `CROSS_UP` `MACD_LINE``SIGNAL_LINE` | MACD 히스토그램 전환 |
| MACD 0선 돌파 | `MACD` `CROSS_UP` `MACD_LINE``ZERO_LINE` | 추세 전환 초기 |
| CCI 과매도 반등 | `CCI` `CROSS_UP` `CCI_VALUE``OVERSOLD_NEG100` | -100선 상향 |
| Williams %R 과매도 | `WILLIAMS_R` `LTE` `WILLIAMS_R_VALUE``OVERSOLD_NEG80` | -80 이하 |
| TRIX 시그널 상향 | `TRIX` `CROSS_UP` `TRIX_VALUE``TRIX_SIGNAL` | TRIX > signal |
| VR 과매도 | `VR` `LTE` `VR_VALUE``OVERSOLD_70` | VR ≤ 70 (매수세 약함 구간 반등) |
### 2.3 추세 강도 확인 — ADX·DMI
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| ADX 추세 시작 | `ADX` `CROSS_UP` `ADX_VALUE``ADX_25` | ADX 25 돌파 — 추세 형성 |
| ADX 강한 추세 | `ADX` `GTE` `ADX_VALUE``ADX_25` | ADX ≥ 25 유지 |
| +DI > -DI | `DMI` `GT` `PDI``MDI` | 상승 방향 우세 |
| +DI 골든크로스 | `DMI` `CROSS_UP` `PDI``MDI` | DMI 골든크로스 |
> **매수 필터 조합 예:** `AND( MA 골든크로스, ADX ≥ 25, +DI > -DI )` — 추세·방향 동시 확인
### 2.4 돌파·신고가 — Donchian / NEW_HIGH
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| 9일 신고가 돌파 | `NEW_HIGH` `CROSS_UP` `CLOSE_PRICE``NH_PRIOR_9` | 직전 9봉 최고가 상향 돌파 |
| 20일 박스 돌파 | `NEW_HIGH` `CROSS_UP` `CLOSE_PRICE``NH_PRIOR_20` | 터틀 S1 / 돈치안 돌파 |
| 55일 장기 돌파 | `NEW_HIGH` `CROSS_UP` `CLOSE_PRICE``NH_PRIOR_55` | 터틀 S2 |
| Donchian 상단 | `DONCHIAN` `CROSS_UP` `CLOSE_PRICE``DC_UPPER_20` | 20일 채널 상단 돌파 |
| Donchian 단·장기 | `DONCHIAN` `CROSS_UP` `DC_UPPER_9``DC_UPPER_20` | 단기 채널이 장기 상단 돌파 |
`NH_PRIOR_{n}`: **당일 봉 제외** 직전 n봉의 최고가 (`PreviousValueIndicator`).
### 2.5 거래량·수급
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| 거래량 > MA | `VOLUME` `GT` `VOLUME_VALUE``VOLUME_MA` | 평균 대비 거래량 증가 |
| OBV 상향 | `OBV` `CROSS_UP` `OBV_LINE``OBV_SIGNAL` | OBV가 시그널선 돌파 |
| OBV > signal | `OBV` `GT` `OBV_LINE``OBV_SIGNAL` | 매수세 누적 |
### 2.6 일목균형표 — 상승 전환
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| 전환선 > 기준선 | `ICHIMOKU` `CROSS_UP` `CONVERSION_LINE``BASE_LINE` | 전환/기준 골든크로스 |
| 구름 상향 돌파 | `ICHIMOKU` `CLOUD_BREAK_UP` | 종가 구름대 상단 돌파 |
| 구름 위 | `ICHIMOKU` `ABOVE_CLOUD` | 강세 구간 |
| 선행1 > 선행2 | `ICHIMOKU` `SPAN1_GT_SPAN2` | 후행 구름 녹색(강세) |
| 후행 > 종가 | `ICHIMOKU` `LAGGING_GT_PRICE` | 후행스팬 지지 |
### 2.7 심리·이격 복합 (33변곡 템플릿)
내장 템플릿 **「33변곡 매수」** — AND 조합:
```
RSI CROSS_UP RSI_VALUE ↔ OVERSOLD_30
MA CROSS_UP MA5 ↔ MA20
MA CROSS_UP CLOSE_PRICE ↔ MA20
MACD CROSS_UP MACD_LINE ↔ SIGNAL_LINE
DISPARITY CROSS_UP DISPARITY20 ↔ OVERSOLD_95
```
### 2.8 멀티 타임프레임 매수
```
TIMEFRAME [1h] AND (
TIMEFRAME [1h] MA CROSS_UP MA20 ↔ MA60 -- 장기 추세
TIMEFRAME [3m] MA CROSS_UP MA10 ↔ MA20 -- 단기 진입
TIMEFRAME [3m] RSI GT RSI_VALUE ↔ OVERSOLD_30
)
```
START 노드 또는 `TIMEFRAME` 노드로 `1m` ~ `1M` 분봉 지정. DSL에 없는 분봉은 평가되지 않습니다.
---
## 3. 매도(SELL) 조건 — 지표별 활용
매도 조건은 `sellCondition` 트리에 설정합니다. `positionMode`에 따라 동작이 달라집니다.
| positionMode | 동작 |
|--------------|------|
| `LONG_ONLY` | **보유 포지션이 있을 때만** 매도 시그널 (Ta4j `shouldExit`) |
| `SIGNAL_ONLY` | 포지션 무관, exit Rule만 충족하면 **매도 시그널** (지표 연속 관찰·차트 마커용) |
### 3.1 추세 이탈 — MA·밴드
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| MA 데드크로스 | `MA` `CROSS_DOWN` `MA10``MA20` | 단기 SMA 하향 이탈 |
| 종가 < 장기선 | `MA` `CROSS_DOWN` `CLOSE_PRICE``MA20` | 추세선 이탈 |
| 볼린저 상단 과열 | `BOLLINGER` `CROSS_UP` `CLOSE_PRICE``UPPER_BAND` | 상단밴드 돌파 (차익) |
| 볼린저 중심 이탈 | `BOLLINGER` `CROSS_DOWN` `CLOSE_PRICE``MIDDLE_BAND` | 중심선 하향 |
| 이격도 과매수 | `DISPARITY` `GTE` `DISPARITY20``OVERBOUGHT_105` | +5% 이상 과열 |
### 3.2 모멘텀·오실레이터 — 과매수·약세
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| RSI 과매수 | `RSI` `GTE` `RSI_VALUE``OVERBOUGHT_70` | RSI ≥ 70 |
| RSI 과매수 이탈 | `RSI` `CROSS_DOWN` `RSI_VALUE``OVERBOUGHT_70` | 70선 하향 (피크 확인) |
| Stochastic 데드크로스 | `STOCHASTIC` `CROSS_DOWN` `STOCH_K``STOCH_D` | %K <%D |
| MACD 하향 | `MACD` `CROSS_DOWN` `MACD_LINE``SIGNAL_LINE` | MACD 데드크로스 |
| CCI 과매수 | `CCI` `GTE` `CCI_VALUE``OVERBOUGHT_100` | CCI ≥ 100 |
| Williams %R 과매수 | `WILLIAMS_R` `GTE` `WILLIAMS_R_VALUE``OVERBOUGHT_NEG20` | -20 이상 |
| TRIX 하향 | `TRIX` `CROSS_DOWN` `TRIX_VALUE``TRIX_SIGNAL` | TRIX < signal |
### 3.3 추세 약화 — ADX·DMI
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| ADX < 25 | `ADX` `LT` `ADX_VALUE``ADX_25` | 추세 약화 |
| -DI > +DI | `DMI` `GT` `MDI``PDI` | 하락 방향 우세 |
| DMI 데드크로스 | `DMI` `CROSS_DOWN` `PDI``MDI` | +DI가 -DI 하향 이탈 |
### 3.4 지지 붕괴 — Donchian / NEW_LOW
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| 9일 신저가 이탈 | `NEW_LOW` `CROSS_DOWN` `CLOSE_PRICE``NL_PRIOR_9` | 단기 지지 붕괴 |
| 20일 채널 하단 | `NEW_LOW` `CROSS_DOWN` `CLOSE_PRICE``NL_PRIOR_20` | 박스 하단 이탈 |
| 터틀 S1 청산 | `DONCHIAN` `CROSS_DOWN` `CLOSE_PRICE``DC_LOWER_10` | 10일 최저가 이탈 |
| 터틀 S2 청산 | `DONCHIAN` `CROSS_DOWN` `CLOSE_PRICE``DC_LOWER_20` | 20일 최저가 이탈 |
### 3.5 일목 — 약세 전환
| 패턴 | DSL 예시 | 설명 |
|------|----------|------|
| 전환 < 기준 | `ICHIMOKU` `CROSS_DOWN` `CONVERSION_LINE``BASE_LINE` | 데드크로스 |
| 구름 하향 | `ICHIMOKU` `CLOUD_BREAK_DOWN` | 구름대 하단 이탈 |
| 구름 아래 | `ICHIMOKU` `BELOW_CLOUD` | 약세 구간 |
| 후행 < 종가 | `ICHIMOKU` `LAGGING_LT_PRICE` | 후행스팬 저항 |
### 3.6 33변곡 매도 템플릿 (AND)
```
RSI GTE RSI_VALUE ↔ OVERBOUGHT_70
MA CROSS_DOWN MA5 ↔ MA20
MA CROSS_DOWN CLOSE_PRICE ↔ MA20
MACD CROSS_DOWN MACD_LINE ↔ SIGNAL_LINE
DISPARITY GTE DISPARITY20 ↔ OVERBOUGHT_105
```
### 3.7 손절·익절 스타일 (DSL만으로)
| 목적 | 접근 |
|------|------|
| 추세 추종 청산 | Donchian / NEW_LOW 하단 이탈 |
| 과열 익절 | RSI ≥ 70, 볼린저 상단, 이격도 ≥ 105 |
| 모멘텀 소멸 | MACD 데드크로스, TRIX 하향 |
| 시간 청산 | `HOLD_N_DAYS`**유지** 조건용 — 청산 타이머는 별도 로직 없음 |
---
## 4. 횡보(레인지) 필터링
횡보 필터는 **매수·매도 진입을 막거나**, **횡보 전용 역추세 전략**을 만들 때 사용합니다. DSL에는 「횡보」 전용 지표 타입은 없고, 아래 조건을 **`AND` / `NOT` / `OR`** 로 조합합니다.
### 4.1 ADX — 추세 강도 (가장 일반적)
| 목적 | 조건 | 해석 |
|------|------|------|
| **횡보만** | `ADX` `LT` `ADX_VALUE``ADX_25` (또는 `HL_MID`) | ADX < 25 → 비추세 |
| **추세만** (횡보 제외) | `NOT( ADX LT ADX_25 )` 또는 `ADX GTE ADX_25` | ADX ≥ 25 |
| ADX 하락 중 | `ADX` `SLOPE_DOWN` `ADX_VALUE` | 추세 강도 감소 |
Ta4j: `ADXIndicator` — Wilder smoothing.
**적용 예 (추세 매수 + 횡보 필터):**
```
AND(
MA CROSS_UP MA10 ↔ MA20, -- 매수 신호
ADX GTE ADX_VALUE ↔ ADX_25 -- 횡보 구간 제외
)
```
### 4.2 볼린저 밴드 폭 (BWI 대체)
`BWI` 지표는 편집기 UI에 있으나 **DSL 어댑터에서 `BWI_VALUE` 미해석**(§7). 대신 **밴드 폭**을 직접 비교:
| 목적 | 조건 | 해석 |
|------|------|------|
| Squeeze (수축) | `BOLLINGER` `DIFF_LT` `UPPER_BAND``LOWER_BAND`, compareValue=좁은값 | 상·하단 간격 좁음 |
| Expansion (확장) | `BOLLINGER` `DIFF_GT` `UPPER_BAND``LOWER_BAND`, compareValue=넓은값 | 변동성 확대 |
Ta4j: `BollingerBandsUpper/LowerIndicator`, `StandardDeviationIndicator`.
### 4.3 MA 수렴 (MA 스프레드)
| 목적 | 조건 | 해석 |
|------|------|------|
| MA 수렴 | `MA` `DIFF_LT` `MA5``MA60`, compareValue=작은값 | 단·장기 이격 좁음 |
| MA 확산 | `MA` `DIFF_GT` `MA5``MA60`, compareValue=큰값 | 추세 뚜렷 |
또는 `MA5 GT MA20` AND `MA20 GT MA60` (정배열) vs `DIFF_LT MA5 MA20` (횡보).
### 4.4 일목 구름대
| 목적 | 조건 | 해석 |
|------|------|------|
| 구름 안 (횡보) | `ICHIMOKU` `IN_CLOUD` | 가격이 선행스팬 사이 |
| 구름 밖만 거래 | `NOT( ICHIMOKU IN_CLOUD )` 또는 `ABOVE_CLOUD` OR `BELOW_CLOUD` | 방향성 구간만 |
| 얇은 구름 | `ICHIMOKU` `DIFF_LT` `LEADING_SPAN1``LEADING_SPAN2`, compareValue=작은값 | 선행1·2 근접 |
### 4.5 Donchian / NEW_HIGH·LOW 채널 폭
| 목적 | 조건 | 해석 |
|------|------|------|
| 좁은 채널 | `DONCHIAN` `DIFF_LT` `DC_UPPER_20``DC_LOWER_20`, compareValue=작은값 | 20일 고저 폭 좁음 |
| 박스권 | `NEW_HIGH` `DIFF_LT` `NH_PRIOR_20``NL_PRIOR_20` (복합 비교) | 신고·신저 gap 좁음 |
### 4.6 오실레이터 중립대
| 목적 | 조건 | 해석 |
|------|------|------|
| RSI 중립 | `AND( RSI GTE 40, RSI LTE 60 )``K_40`, `K_60` 사용 | 40~60 박스 |
| Stochastic 중립 | `STOCH_K` `GTE`/`LTE``HL_MID` ± 범위 | %K 50 근처 |
| CCI 중립 | `CCI` `DIFF_LT` `CCI_VALUE``HL_MID`, compareValue=50 | 0선 근처 |
| MACD 히스토그램 수렴 | `MACD` `DIFF_LT` `HISTOGRAM``ZERO_LINE`, compareValue=작은값 | 모멘텀 약함 |
### 4.7 DMI — 방향성 없음
| 목적 | 조건 | 해석 |
|------|------|------|
| +DI ≈ -DI | `DMI` `DIFF_LT` `PDI``MDI`, compareValue=작은값 | 방향 우열 없음 |
| 양 DI 모두 낮음 | `AND( PDI LT HL_UNDER, MDI LT HL_UNDER )` | 힘 없는 횡보 |
### 4.8 거래량·VR
| 목적 | 조건 | 해석 |
|------|------|------|
| 거래량 위축 | `VOLUME` `LT` `VOLUME_VALUE``VOLUME_MA` | 평균 이하 |
| VR 중립 | `VR` `DIFF_LT` `VR_VALUE``NEUTRAL_100`, compareValue=20 | VR ≈ 100 |
### 4.9 횡보 필터 조합 템플릿
#### A. 추세 전략에 횡보 제외 (권장)
```
AND(
{본래 매수/매도 조건},
ADX GTE ADX_VALUE ↔ ADX_25,
NOT( ICHIMOKU IN_CLOUD )
)
```
#### B. 횡보 역추세 전용 (볼린저 + RSI)
```
AND(
ADX LT ADX_VALUE ↔ ADX_25,
BOLLINGER CROSS_UP CLOSE_PRICE ↔ LOWER_BAND, -- 매수 (하단 반등)
RSI LTE RSI_VALUE ↔ OVERSOLD_30
)
```
#### C. Squeeze 후 돌파 대기
```
AND(
BOLLINGER DIFF_LT UPPER_BAND ↔ LOWER_BAND, compareValue=좁은값,
ADX LT ADX_25
)
-- 이후 별도 OR 분기에서 NEW_HIGH 돌파 등 추가
```
---
## 5. 논리 조합 · TIMEFRAME · Stoch 페어
### 5.1 AND / OR / NOT 패턴
| 전략 유형 | 구조 |
|-----------|------|
| 보수적 진입 | `AND(추세, 모멘텀, 거래량, NOT 횡보)` |
| 다중 신호 | `OR(RSI 매수, MACD 매수, MA 매수)` |
| 횡보 제외 | `NOT( ADX LT 25 )` 또는 `NOT( IN_CLOUD )` |
| 확인 필터 | `AND( CROSS_UP, HOLD_N_DAYS )` — 돌파 N봉 유지 |
### 5.2 TIMEFRAME
- START 노드 또는 `TIMEFRAME` 자식으로 `1m`, `3m`, `5m`, `10m`, `15m`, `30m`, `1h`, `4h`, `1d`, `1w`, `1M` 지정
- 상위 TF 추세 + 하위 TF 진입이 일반적
- 복합지표 `leftCandleType` / `rightCandleType`으로 **서로 다른 분봉** 비교 가능
### 5.3 Stoch 페어 (`stochPair`)
OR 루트에 Stochastic 과열/과매도와 **다른 보조지표**를 순차 OR로 묶는 복합 패턴 (편집기 고급 기능).
---
## 6. Ta4j 클래스 매핑 (DSL → 백엔드)
| DSL `indicatorType` | DB `indicatorParams` 키 | 주요 Ta4j 클래스 |
|---------------------|-------------------------|------------------|
| MA | SMA | `SMAIndicator` |
| EMA | SMA (period) | `EMAIndicator` |
| RSI | RSI | `RSIIndicator` |
| MACD | MACD | `MACDIndicator`, `EMAIndicator` |
| CCI | CCI | `CciOnSourceIndicator` |
| ADX | ADX | `ADXIndicator` |
| DMI | DMI | `PlusDIIndicator`, `MinusDIIndicator` |
| STOCHASTIC | Stochastic | `StochasticOscillatorKIndicator`, `SMAIndicator` |
| WILLIAMS_R | WilliamsPercentRange | `WilliamsRIndicator` |
| TRIX | TRIX | 3×`EMAIndicator` + ROC |
| OBV | OBV | `OnBalanceVolumeIndicator` |
| BOLLINGER | BollingerBands | `BollingerBands*Indicator` |
| DONCHIAN | DonchianChannels | `DonchianChannel*Indicator` |
| NEW_HIGH / NEW_LOW | DonchianChannels | `HighestValueIndicator` / `LowestValueIndicator` + `PreviousValueIndicator` |
| ICHIMOKU | IchimokuCloud | `Ichimoku*Indicator` |
| VR | VR | 커스텀 (IndicatorService 동일) |
| DISPARITY | Disparity | 종가/SMA 기반 |
| PSYCHOLOGICAL 계열 | Psychological 등 | 커스텀 |
| VOLUME | (Volume) | `VolumeIndicator`, `SMAIndicator` |
**교차·비교 Rule:** `CrossedUpIndicatorRule`, `CrossedDownIndicatorRule`, `OverIndicatorRule`, `UnderIndicatorRule`, `IsRisingRule`, `IsFallingRule`.
---
## 7. 알려진 제한 · 미지원
### 7.1 DSL UI 있으나 어댑터 미구현 ⚠️
| 지표 | 편집기 필드 | 현상 |
|------|-------------|------|
| `BWI` | `BWI_VALUE` | `resolveIndicatorField`에 분기 없음 → **종가로 폴백** (warn 로그) |
| `VOLUME_OSC` | `VOLUME_OSC_VALUE` | 동일 — **종가로 폴백** |
차트(`IndicatorService`)에서는 `BollingerBandWidthIndicator`, Volume EMA OSC 정상 계산. **전략 조건에는 §4.2·§4.8의 대체 조합 사용 권장.**
### 7.2 Ta4j·차트에만 있고 DSL 없음
`IndicatorController` `/list` 기준 차트 전용 예:
`WMA`, `HMA`, `VWMA`, `KeltnerChannels`, `BBPercentB`, `StochRSI`, `AwesomeOscillator`, `DPO`, `Momentum`, `ROC`, `TSI`, `Aroon`, `ParabolicSAR`, `Choppiness`, `MassIndex`, `ATR`, `MFI`, `ChaikinMF`
→ 전략 DSL 팔레트에 없으면 **조건으로 사용 불가**.
### 7.3 기타 주의
| 항목 | 내용 |
|------|------|
| MA 기간 | `MA{n}` = n봉 SMA. UI 「MA2(10일)」= `MA10` |
| 워밍업 | 백테스트는 전략 최대 MA 기간 + 평가 구간(200봉)만큼 워밍업 후 평가 |
| CROSS 1봉 | 교차 조건은 해당 봉 1회만 true |
| hline | `HL_*` 또는 `K_{숫자}` — 보조지표 설정 `thresholdOverride`로 전략 전용 값 가능 |
| NEW_PSYCHOLOGICAL | 복합·조건 지원, 메인 팔레트에는 없을 수 있음 — 템플릿·직접 추가 |
---
## 8. 빠른 참조 — 조건 × 지표 매트릭스
**○** = `INDICATOR_CONDITIONS`에 포함. **◎** = 일목 전용 추가. **△** = UI만 (어댑터 미구현).
| 지표 | GT/LT/GTE/LTE | CROSS | SLOPE | DIFF | HOLD | 일목전용 |
|------|:---:|:---:|:---:|:---:|:---:|:---:|
| MA, EMA | ○ | ○ | ○ | ○ | ○ | |
| BOLLINGER | ○ | ○ | ○ | ○ | ○ | |
| DONCHIAN, NEW_HIGH, NEW_LOW | ○ | ○ | ○ | ○ | ○ | |
| RSI, MACD, CCI, STOCHASTIC | ○ | ○ | ○ | ○ | ○ | |
| ADX, DMI, TRIX, OBV, VR | ○ | ○ | ○ | ○ | ○ | |
| DISPARITY, PSY* | ○ | ○ | ○ | ○ | ○ | |
| VOLUME | ○ | ○ | ○ | ○ | ○ | |
| BWI, VOLUME_OSC | △ | △ | △ | △ | △ | |
| ICHIMOKU | ○ | ○ | ○ | ○ | ○ | ◎ |
---
## 9. 참고 소스
| 파일 | 내용 |
|------|------|
| `frontend/src/utils/strategyTypes.ts` | 지표 목록, `INDICATOR_CONDITIONS`, 필드 옵션 |
| `frontend/src/utils/strategyEditorShared.tsx` | 편집기 필드·hline·기본 파라미터 |
| `frontend/src/utils/compositeIndicators.ts` | 복합지표 2기간 교차 |
| `frontend/src/utils/strategyPresets.ts` | 내장 매수/매도 템플릿 |
| `backend/.../StrategyDslToTa4jAdapter.java` | DSL → Ta4j Rule 변환 |
| `backend/.../IndicatorService.java` | 차트 지표 계산 (Ta4j) |
---
*문서 버전: goldenChart DSL 기준 (StrategyDslToTa4jAdapter + strategyTypes.ts 동기화)*