# 매매전략 조건 — 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` | (종가/MA−1)×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 동기화)*