17 KiB
드로잉선 → 전략 조건 검토
실시간 차트 드로잉 툴바(TradingView 스타일)에 제공되는 선·채널·피보나치 등 도구 중,
현재 구현된 추세선 돌파(TREND_LINE_CROSS_*) 와 같이 봉마다 자동 계산 → Ta4j Rule → 실시간·전략평가 시그널로 확장 가능한 항목을 정리한 문서입니다.
관련: 매매전략조건.md · 전략편집기 로직 및 동작흐름.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 |
알고리즘 (패러렐 채널 자동화):
[i−N, i−1]에서 상승 추세선(저점) 또는 하락 추세선(고점) 1본 계산 (현행과 동일)- offset = 구간 내 최대 High − 추세선값 (상단 채널) 또는 추세선값 − 최소 Low (하단)
- 또는 스윙 고점 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 템플릿 (현행 추세선):
직전 봉: 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 구현 기준