Files
goldenChart/드로잉선_전략조건.md
2026-06-30 21:59:13 +09:00

397 lines
17 KiB
Markdown
Raw Permalink 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.
# 드로잉선 → 전략 조건 검토
실시간 차트 **드로잉 툴바**(TradingView 스타일)에 제공되는 선·채널·피보나치 등 도구 중,
현재 구현된 **추세선 돌파(`TREND_LINE_CROSS_*`)** 와 같이 **봉마다 자동 계산 → Ta4j Rule → 실시간·전략평가 시그널**로 확장 가능한 항목을 정리한 문서입니다.
> **관련:** [매매전략조건.md](./매매전략조건.md) · [전략편집기 로직 및 동작흐름.md](./전략편집기%20로직%20및%20동작흐름.md)
> **코드 기준:** `DrawingToolbar.tsx` · `DrawingToolId` · `StrategyDslToTa4jAdapter` · `TrendLineMath`
---
## 1. 현재 추세선 전략 조건 (기준 구현)
| 항목 | 내용 |
|------|------|
| DSL | `TREND_LINE_CROSS_UP` / `TREND_LINE_CROSS_DOWN` |
| 드로잉 대응 | **추세줄**(`trendline`) · **익스텐디드 라인**(`extended_line`)과 개념적으로 동일 (2점 직선 + 연장) |
| 계산 | fit 구간 `[iN, i1]` · **스윙 피벗** (상승=저점↑ / 하락=고점↓) · 시그널 봉 `i`까지 연장 |
| 판정 | 직전 봉 ≤ 추세선 → 현재 봉 > 추세선 (상향) / 반대 (하향) |
| 설정 | 설정 → 전략 설정 → 추세선 (모드·N·스윙 k) |
| 파이프라인 | `StrategyDslToTa4jAdapter``BacktestingService` · `LiveConditionStatusService` · 전략평가 차트 |
**핵심 패턴:** 차트에 사용자가 그리는 **고정 좌표**가 아니라, 매 봉 `i`마다 **Indicator가 Y값(또는 시간)을 반환**하고, 기존 `CROSS_UP`/`CROSS_DOWN` Rule과 결합합니다.
---
## 2. 드로잉 툴바 선·채널 도구 목록
`DrawingToolbar` **라인 / 피보나치 / 채널 / 프로젝션** 그룹 기준 (측정·도형·텍스트·패턴 제외).
### 2.1 라인 그룹
| ID | UI 이름 | 점 수 | 기하 |
|----|---------|-------|------|
| `trendline` | 추세줄 | 2 | 2점 직선, **양방향** 연장 |
| `ray` | 빛(레이) | 2 | 2점 직선, **우측** 연장 |
| `extended_line` | 익스텐디드 라인 | 2 | 2점 직선, **양방향** 연장 (`trendline`과 동일 렌더) |
| `arrow` | 화살표 추세선 | 2 | 레이 + 화살표 |
| `trend_angle` | 추세각 | 2 | 추세선 + 각도 표시 |
| `info_line` | 인포 라인 | 2 | 2점 + 거리·각도 라벨 |
| `hline` | 가로줄 | 1 | **수평선** (가격 고정) |
| `hline_ray` | 가로빛 | 1 | 앵커 시점부터 **우측** 수평 |
| `vline` | 수직선 | 1 | **수직선** (시간 고정) |
| `cross_line` | 크로스 라인 | 1 | 수평+수직 교차 |
| `channel` | 추세 채널 | 3 | 기준 추세선 + 폭 |
| `parallel_channel` | 패러렐 채널 | 2 | 평행 2선 |
| `disjoint_channel` | 디스조인트 채널 | 4 | 비평행 2선 |
| `flat_top_bottom` | 플랫 탑/바텀 | 2+ | 상단 수평 + 하단 추세 |
### 2.2 피보나치·갠·피치포크
| ID | UI 이름 | 산출물 |
|----|---------|--------|
| `fib` | 피보나치 되돌림 | 2점 구간 **수평 레벨** 다수 (0, 23.6, …, 100%) |
| `fib_ext` | 추세기반 피보나치 확장 | 되돌림 + **확장** 수평 레벨 |
| `fib_channel` | 피보나치 채널 | 기울어진 채널 + 피보나치 분할 |
| `fibtz` | 피보나치 타임존 | 2점 시간 구간 **수직선** |
| `fib_speed_fan` | 스피드 리지스턴스 팬 | 1점에서 **다발 레이** |
| `fib_trend_time` | 추세기반 피보나치 시간 | 추세선 + 시간축 피보나치 |
| `fib_circles` / `fib_spiral` / `fib_speed_arc` / `fib_wedge` | 원·스파이럴·아크·웻지 | 곡선/영역 |
| `pitchfork` / `pitchfork_schiff` / `pitchfork_inside` | 피치포크 | 3점 → **중심선 + 평행 2선** |
| `gann_box` / `gann_square` / `gann_fan` | 갠 | 격자·팬 **다발 직선** |
### 2.3 프로젝션·기타 (선 성격)
| ID | UI 이름 | 비고 |
|----|---------|------|
| `anchored_vwap` | 앵커드 VWAP | 앵커 시점부터 **누적 VWAP 곡선** |
| `price_range` | 가격범위 | 구간 **상·하단 수평** |
| `date_range` | 날짜 범위 | **수직** 구간 |
| `guide_line` | 가이드선 | 보조 수평 (차트 UI) |
| `forecast` / `projection_tool` | 예측·프로젝션 | 2점+ **연장** |
---
## 3. 전략 조건화 평가 기준
드로잉 도구를 **실시간 매매 시그널**로 쓰려면 아래가 필요합니다.
| # | 요건 | 설명 |
|---|------|------|
| 1 | **봉 인덱스 결정론** | 사용자 클릭 없이 OHLCV·지표만으로 매 봉 동일 Y(또는 시간) 계산 |
| 2 | **교차·돌파 정의** | `CROSS_UP`/`DOWN` 또는 `GT`/`LT`로 표현 가능 |
| 3 | **Ta4j Indicator** | `getValue(i)` 또는 Rule 한 개로 encapsulation |
| 4 | **워밍업·NaN** | lookback·스윙 k만큼 불안정 구간 처리 |
| 5 | **멀티 TF·좌필드** | 종가/RSI 등 left 지표와 스케일 일치 |
**등급**
- **A — 즉시 확장 권장:** 추세선과 동일 패턴(동적 1~2선 + CROSS), 구현 난이도 중, 실전 활용도 높음
- **B — 부분 가능 / DSL已有:** 수평·채널·고저가 등 **이미 다른 필드로 구현**됐거나, 파라미터만 추가하면 됨
- **C — 전략 자동화 부적합:** 주관적 패턴·다점 수동 입력·시간만 조건·시각 주석 위주
---
## 4. 요약 매트릭스
| 드로잉 도구 | 등급 | 전략 활용 | 비고 |
|-------------|------|-----------|------|
| **추세줄 / 익스텐디드 / 레이** | **A** | ✅ 구현됨 (`TREND_LINE_*`) | 레이=연장 방향만 다름 → `extendMode` 파라미터로 통합 가능 |
| **가로줄** | **B** | ✅ 대체 가능 | `CROSS_*` + 고정값·`NH_PRIOR_N`·볼린저·MA |
| **가로빛** | **A** | ⚠️ 미구현 | 앵커 이후 구간 수평 = **구간 고점/저점** 또는 **앵커 VWAP** |
| **수직선 / 크로스 / 피보나치 TZ / 날짜범위** | **B~C** | △ 시간 조건 | 가격 돌파가 아닌 **봉 번호·세션·시간** 조건 (`TIMEFRAME`·`HOLD` 확장) |
| **추세·패러렐·플랫탑 채널** | **A** | ⚠️ 미구현 | **채널 상·하단 돌파** — Donchian과 유사하나 **기울기** 있음 |
| **디스조인트 채널** | **B** | △ | 4점 자유도 높음 → 자동화 시 규칙 고정 필요 |
| **피보나치 되돌림/확장** | **A** | ⚠️ 미구현 | 스윙 고저 + **수평 레벨** 돌파 (0.382, 0.5, 0.618…) |
| **피치포크 (중심선)** | **A** | ⚠️ 미구현 | 3 스윙점 → **중앙 추세선** 돌파 (추세선 일반화) |
| **피보나치 팬 / 갠 팬** | **B** | △ | 다중 레이 — **특정 각도 레이** 돌파로 축소 가능 |
| **앵커드 VWAP** | **B** | △ | VWAP 지표 + **앵커 lookback** 조건 (별도 지표 DSL) |
| **가격범위** | **A** | ⚠️ 미구현 | N봉 **Range 상·하단** 돌파 (Donchian과 동일 family) |
| **추세각 / 인포 / 화살표** | **C** | ✗ | 표시·측정용, 시그널 의미 없음 |
| **패턴(XABCD·H&S·엘리엇)** | **C** | ✗ | 형태 인식·주관적 — 별도 패턴 엔진 필요 |
| **원·호·브러시·텍스트** | **C** | ✗ | 시각 주석 |
---
## 5. A등급 — 구현 권장 (추세선과 동일 아키텍처)
### 5.1 레이 / 익스텐디드 (`ray`, `extended_line`)
**드로잉 의미:** 2점 직선, 연장 방향만 다름 (우측 only vs 양방향).
**전략 정의 (제안):**
- 기존 `TREND_LINE_*` + 파라미터 `extendMode: RIGHT | BOTH | LEFT`
- fit·피벗 로직은 **현재 `TrendLineMath`와 동일**
- `ray` = 피벗 선을 **평가 봉 i까지만** extrapolation (좌측 연장 없음)
**조건 예:**
| 조건 | 의미 |
|------|------|
| `TREND_LINE_CROSS_UP` + `extendMode=RIGHT` | 하락 저항 **레이** 상향 돌파 |
| `TREND_LINE_CROSS_DOWN` | 상승 지지선 하향 이탈 |
**구현:** `TrendLineMath`에 연장 방향만 추가 — **난이도: 낮음**.
---
### 5.2 추세 채널 / 패러렐 채널 (`channel`, `parallel_channel`)
**드로잉 의미:** 평행한 **상·하 2선**; 가격이 채널 밖으로 나가면 추세 가속·전환.
**전략 정의 (제안):**
| DSL (제안) | 계산 | 매수·매도 |
|------------|------|-----------|
| `CHANNEL_BREAK_UP` | 상단선 = 기준 추세선 + offset (또는 2번째 피벗 평행) | 종가 **상단** 상향 돌파 |
| `CHANNEL_BREAK_DOWN` | 하단선 = 기준 추세선 − offset | 종가 **하단** 하향 돌파 |
| `CHANNEL_BOUNCE_UP` | 하단선 터치 후 반등 | `CROSS_UP` on lower band |
**알고리즘 (패러렐 채널 자동화):**
1. `[iN, i1]`에서 **상승 추세선(저점)** 또는 **하락 추세선(고점)** 1본 계산 (현행과 동일)
2. offset = 구간 내 **최대 High 추세선값** (상단 채널) 또는 **추세선값 최소 Low** (하단)
3. 또는 **스윙 고점 2개 + 스윙 저점 2개**로 평행선 쌍 결정
**Ta4j:** `UpperChannelIndicator` / `LowerChannelIndicator` (커스텀) + `CROSS_*`.
**기존 DSL과 관계:** `DONCHIAN` `DC_UPPER_N` / `DC_LOWER_N`**수평 채널**(기울기 0). 본 조건은 **기울어진 채널** — 차별화됨.
**난이도: 중.**
---
### 5.3 플랫 탑/바텀 (`flat_top_bottom`)
**드로잉 의미:** 한쪽은 **수평**(저항/지지), 다른 쪽은 **기울어진** 변 연결 — 삼각 수렴·확장 패턴의 일부.
**전략 정의 (제안):**
| DSL (제안) | 구성 |
|------------|------|
| `FLAT_TOP_BREAK_UP` | `[iN,i1]` **최고가 수평선** (flat top) 상향 돌파 |
| `FLAT_BOTTOM_BREAK_DOWN` | **최저가 수평선** (flat bottom) 하향 돌파 |
| `WEDGE_BREAK_*` | flat + 대각 추세선 **수렴 후** 돌파 (확장) |
flat top = `NH_PRIOR` 구간 max(High)와 유사하나 **동일 구간** 명시.
**난이도: 중 (채널 특수 케이스).**
---
### 5.4 피보나치 되돌림 / 확장 (`fib`, `fib_ext`)
**드로잉 의미:** 스윙 A→B 구간에 **비율별 수평선** (0%, 38.2%, 50%, 61.8%, 100% …).
**전략 정의 (제안):**
```
FIB_LEVEL_CROSS_UP / DOWN
- swingHigh, swingLow: [iN, i1] 스윙 (또는 구간 고/저)
- level: 0.382 | 0.5 | 0.618 | 0.786 | 1.272 (확장)
- left: CLOSE_PRICE (또는 지표)
```
| 활용 | 조건 |
|------|------|
| 되돌림 매수 | 61.8% **지지**`CROSS_UP` |
| 되돌림 매도 | 38.2% **저항**`CROSS_DOWN` |
| 확장 목표 | 1.272 / 1.618 **돌파** 추적 |
**Indicator:** `FibLevelIndicator(swingA, swingB, ratio)` → bar i에서 해당 레벨 Y.
**차트 표시:** 전략평가 시 선택 봉 기준 **해당 레벨 1개** 또는 **주요 3선**만 overlay (추세선과 동일 UX).
**난이도: 중.**
---
### 5.5 피치포크 중심선 (`pitchfork` 계열)
**드로잉 의미:** 3점(스윙1, 스윙2, 스윙3) → **중앙 추세선** + 위·아래 평행선.
**전략 정의 (제안):**
| DSL (제안) | 의미 |
|------------|------|
| `PITCHFORK_MEDIAN_CROSS_UP/DOWN` | **중심선** 돌파 |
| `PITCHFORK_UPPER_TOUCH` | 상단 평행선 도달 |
| `PITCHFORK_LOWER_BOUNCE` | 하단 평행선 반등 |
**알고리즘:** 3 스윙 저점(상승) 또는 고점(하락) → 중점·기울기 → median line at i.
Andrews / Schiff / Inside는 **중심선 계산식**만 다름 — 설정에서 `pitchforkVariant`.
**난이도: 중~상.**
---
### 5.6 N봉 가격 레인지 (`price_range` 드로잉 ↔ Range 돌파)
**드로잉 의미:** 구간 **상단·하단** 박스.
**전략 정의:** Donchian과 동일 family.
| 기존 DSL | 드로잉 대응 |
|----------|-------------|
| `CLOSE CROSS_UP NH_PRIOR_20` | 20봉 **신고가(상단)** 돌파 |
| `CLOSE CROSS_DOWN NL_PRIOR_20` | 20봉 **신저가(하단)** 이탈 |
| `DONCHIAN` + `DC_UPPER_N` | 채널 상단 |
**추가 제안:** `RANGE_BREAK_UP/DOWN` — lookback N 명시적 alias (UI는 **가격범위** 드로잉과 매핑).
**난이도: 낮음 (이미 80% 구현).**
---
## 6. B등급 — 부분 가능 / 기존 DSL로 커버
### 6.1 가로줄 (`hline`)
| 드로잉 | 전략 DSL 대체 |
|--------|----------------|
| 임의 가격 수평선 | `GT`/`LT`/`CROSS_*` + `compareValue` 또는 지표 임계 |
| N봉 고가/저가 | `NH_PRIOR_N` / `NL_PRIOR_N` · `DC_UPPER_N` / `DC_LOWER_N` |
| 볼린저 상·중·하 | `BOLLINGER` + `UPPER`/`MIDDLE`/`LOWER` |
| 전고·전저 | `NEW_HIGH` / `NEW_LOW` 지표 |
**신규 DSL 필요성:** 낮음. 전략편집기 **「가로줄 = 수준 돌파」** 프리셋 UI만 추가해도 충분.
---
### 6.2 가로빛 (`hline_ray`)
**의미:** 특정 **시점 이후**에만 유효한 수평선 (예: 돌파봉 종가, 당일 시가).
**제안:**
| DSL (제안) | 정의 |
|------------|------|
| `SESSION_OPEN` | 당일/세션 시가 (수평) |
| `BAR_N_CLOSE` | N봉 전 종가 수평 (앵커) |
| `SWING_LEVEL` | 마지막 스윙 고/저 **수평 레이** |
**난이도: 중** (앵커 bar index 추적).
---
### 6.3 앵커드 VWAP (`anchored_vwap`)
**의미:** 특정 봉부터 누적 VWAP.
**전략:** `VWAP` 지표(또는 신규 `ANCHORED_VWAP`) + `CROSS_UP/DOWN`.
앵커 = `ianchorLookback` 또는 **세션 시작**.
**난이도: 중** (볼륨·누적 합).
---
### 6.4 피보나치 팬 / 갠 팬 (`fib_speed_fan`, `gann_fan`)
**의미:** 1점에서 **여러 각도**의 레이.
**전략 축소:** 팬 전체가 아닌 **특정 비율 1선**만 — 예: 1×1, 2×1 갠 각도 = 기울기 `k`인 **동적 추세선**.
| 제안 | 조건 |
|------|------|
| `GANN_FAN_CROSS` | 스윙 앵커 + `slopeRatio` (1/1, 1/2…) 레이 돌파 |
**난이도: 중** (추세선 + 고정 기울기).
---
### 6.5 수직선·시간 (`vline`, `fibtz`, `date_range`)
**의미:** **가격**이 아니라 **시간/봉** 조건.
| 활용 | DSL 방향 |
|------|----------|
| 특정 시각 이후만 매수 | `TIMEFRAME` + 세션 필터 |
| N봉 경과 후 | `HOLD_N_DAYS` · `BAR_INDEX ≥ anchor` |
| 피보나치 시간대 | `TIME_FIB_ZONE` (i가 [t0+φⁿ·Δt] 근처) |
실시간 **가격 돌파** 시그널과는 별도 — **필터/타이밍** 조건으로 AND 결합.
**난이도: 중** (가격 Indicator와 분리).
---
## 7. C등급 — 자동 전략 조건 부적합
| 유형 | 이유 |
|------|------|
| **추세각·인포라인·화살표** | 측정·주석; Y(t) 단일 함수 아님 |
| **harmonic 패턴** (XABCD, ABCD, Cypher, H&S) | 4~5점 **형태 매칭** — ML/규칙 트리 별도 |
| **엘리엇 파동** 드로잉 | 파동 카운트 주관적; ta4j Elliott는 분석용 |
| **고스트피드·봉패턴** | 미래 봉 투영 — 백테스트 **룩어헤드** 위험 |
| **long/short position** 박스 | RR 시각화; 진입·손절은 **별도 주문 DSL** |
| **브러시·텍스트·핀** | 사용자 주석 |
| **원·타원·삼각형** | 영역 포함 판정 — `IN_RECT`류는 가능하나 드로잉과 무관 |
---
## 8. 공통 구현 패턴 (추세선과 동일)
신규 드로잉型 조건 추가 시 **권장 스택:**
```
1. DSL conditionType (예: CHANNEL_BREAK_UP)
2. Math/Indicator (bar i, lookback, config → Y 또는 time)
3. StrategyDslToTa4jAdapter → buildXxxCrossRule (고정 창 [iN,i1])
4. BacktestSettings (전역 default N, k, ratio…)
5. 전략편집기 팔레트 (추세 탭과 동일 PaletteChip UX)
6. 전략평가 차트 (선택 봉 1개 overlay only)
7. LiveConditionStatusService 라벨
```
**교차 Rule 템플릿 (현행 추세선):**
```text
직전 봉: left[i1] ≤ line[i1]
현재 봉: left[i] > line[i] → CROSS_UP
line[i±k]는 동일 fit 창 [iN, i1]에서 extrapolation
```
---
## 9. 구현 우선순위 (로드맵 제안)
| 순위 | 기능 | 드로잉 대응 | 이유 |
|------|------|-------------|------|
| 1 | `extendMode` on `TREND_LINE` | ray / extended | 코드 변경 최소 |
| 2 | `CHANNEL_BREAK_*` | channel, parallel | 돈치안보다 실전 TA에 가까움 |
| 3 | `FIB_LEVEL_CROSS_*` | fib, fib_ext | 되돌림·확장 매매 빈도 높음 |
| 4 | `FLAT_TOP/BOTTOM_*` | flat_top_bottom | 삼각·깃발 패턴 기초 |
| 5 | `PITCHFORK_MEDIAN_*` | pitchfork | 중심선 트레이딩 |
| 6 | 가로줄 프리셋 UI | hline | 신규 엔진 없이 DSL 노출 |
| 7 | `ANCHORED_VWAP_CROSS` | anchored_vwap | VWAP 전략 수요 |
| 8 | 시간 조건 (`TIME_*`) | vline, fibtz | 필터로 활용 |
---
## 10. 실시간 매매 체크 연동
현재 파이프라인은 **드로잉 객체(JSON)를 읽지 않습니다.**
차트에 사용자가 그린 선과 **전략 시그널은 독립**이며, 전략은 **동일 수학 규칙**으로 매 봉 재계산합니다.
| 단계 | 서비스 |
|------|--------|
| 설정 로드 | `BacktestSettingsService``TrendLineConfig` |
| Rule 생성 | `StrategyDslToTa4jAdapter.toRule` |
| 백테스트·스캔 | `BacktestingService` |
| 실시간 | `LiveConditionStatusService` (조건별 충족/미충족) |
| UI | `StrategyEvaluationChart` · 가상/실전 차트 시그널 마커 |
신규 선 조건도 **드로잉 저장소와 연동할 필요 없음** — 추세선과 같이 **Indicator 기반**이면 실시간 체크에 바로 투입 가능.
---
## 11. 한 줄 결론
> **추세선(`TREND_LINE`)과 같이 “매 봉 Y값을 계산하는 1~2차원 직선·수평 레벨”** 이면 대부분 `CROSS_*` Rule로 실시간 전략에 넣을 수 있다.
> **우선순위는 채널(평행선)·피보나치 수준·레이 연장 방향**이며, **가로줄·Donchian·볼린저**는 이미 DSL로 커버된다.
> **패턴·팬 전체·브러시**는 드로잉 툴로는 유용하나 **자동 시그널**에는 부적합하거나 별도 엔진이 필요하다.
---
*문서 버전: 2026-06 — goldenChart 드로잉 툴바·TREND_LINE 구현 기준*