# 드로잉선 → 전략 조건 검토 실시간 차트 **드로잉 툴바**(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 구간 `[i−N, i−1]` · **스윙 피벗** (상승=저점↑ / 하락=고점↓) · 시그널 봉 `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. `[i−N, i−1]`에서 **상승 추세선(저점)** 또는 **하락 추세선(고점)** 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` | `[i−N,i−1]` **최고가 수평선** (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: [i−N, i−1] 스윙 (또는 구간 고/저) - 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`. 앵커 = `i−anchorLookback` 또는 **세션 시작**. **난이도: 중** (볼륨·누적 합). --- ### 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 (고정 창 [i−N,i−1]) 4. BacktestSettings (전역 default N, k, ratio…) 5. 전략편집기 팔레트 (추세 탭과 동일 PaletteChip UX) 6. 전략평가 차트 (선택 봉 1개 overlay only) 7. LiveConditionStatusService 라벨 ``` **교차 Rule 템플릿 (현행 추세선):** ```text 직전 봉: left[i−1] ≤ line[i−1] 현재 봉: left[i] > line[i] → CROSS_UP line[i±k]는 동일 fit 창 [i−N, i−1]에서 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 구현 기준*