Files
goldenChart/전략템플릿.md
2026-06-30 21:59:13 +09:00

19 KiB
Raw Permalink Blame History

전략편집기 — 템플릿 탭 ↔ 매매 시그널 감지

전략편집기 우측 템플릿 탭에 나열된 각 전략을 적용했을 때 생성·저장되는 DSL이,
실제 차트·백테스트·실시간 평가에서 어떻게 매수/매도 시그널로 판정되는지를 정리한 문서입니다.

평가 원천: StrategyDslToTa4jAdapter → Ta4j Rule → 봉 i에서 rule.isSatisfied(i)
관련: 전략지표컨트롤.md · 매매전략조건.md


1. 템플릿 탭 구조

파일: StrategyEditorPage.tsx, strategyTemplateList.ts, TemplatePaletteTab.tsx

템플릿 목록은 4종 출처를 하나의 리스트로 합칩니다 (buildStrategyTemplatePaletteRows).

출처 (source) 배지 개수(기본) 생성·적용
builtin (없음) 28 getStrategyTemplates()
composite-palette 복합지표 ~58 복합지표 팔레트와 동일 항목
sideways-palette 횡보지표 52 횡보필터 팔레트와 동일 항목
user 내 템플릿 사용자 저장 ui_preferences.strategyEditor.userTemplates

검색(templateSearch)은 라벨·설명·매수/매도·배지 문자열로 필터합니다.


2. 템플릿 적용 방식 (중요)

템플릿을 더블클릭/적용할 때 동작이 출처마다 다릅니다.

출처 적용 함수 캔버스 동작
내장 (builtin) handleTemplate 해당 매수 또는 매도 탭 전체를 교체 (반대 탭·고아 노드 초기화)
내 템플릿 (user) applyUserTemplate 저장된 LogicNode 트리로 해당 탭 전체 교체
복합지표 (composite-palette) applyPaletteItem 현재 탭 루트에 AND 병합 (기존 조건 유지 + 추가)
횡보지표 (sideways-palette) applySidewaysFilter 현재 탭 루트에 AND 병합 (필터 노드 추가)
[내장/내 템플릿 적용]
  → buyCondition 또는 sellCondition = 템플릿 루트 1개 (교체)

[복합·횡보 템플릿 적용]
  → mergeAtRoot(기존 루트, 새 노드, AND) — 다른 조건과 결합 가능

전략평가 탭에서는 buildTemplateEvaluationPayload가 내장/내 템플릿을 새 평가 전략으로 만들고, 복합·횡보는 동일 빌더로 DSL을 생성합니다.


3. 시그널 판정 공통 규칙

템플릿도 최종적으로 LogicNode 트리이므로, leaf CONDITION마다 아래 규칙이 적용됩니다.

conditionType i에서 true 조건
CROSS_UP left[i1] ≤ right[i1] left[i] > right[i]
CROSS_DOWN left[i1] ≥ right[i1] left[i] < right[i]
GT / LT / GTE / LTE left[i] vs right[i] 수준 비교
AND 모든 자식 true
OR 하나라도 true
NOT 자식 false
EXISTS_IN (N봉) 최근 N봉 중 core Rule 1회 이상 true

필터 강도: 복합 전략(9·20 신고가, 33변곡, 안정형 등)은 기본 relaxed(완화) — ADX·거래량 등 보조 필터 없음이 기본값입니다. 편집기에서 강함/보통으로 변경 가능.

positionMode: 설정 → 전략 설정. LONG_ONLY면 BUY 후 exit(SELL) true 전까지 재진입 BUY 억제.


4. 내장 템플릿 (28종)

출처: strategyPresets.tsgetStrategyTemplates(def)

MA 기간은 설정의 maLines[0], maLines[1] (기본 5·10일)을 사용합니다.

4.1 단순 템플릿 (kind: 'simple') — 16종

CONDITION 1개. simpleTemplateToNode()로 변환.

라벨 signal indicator condition left → right 시그널 의미
MA 골든크로스 매수 buy MA CROSS_UP MA5 → MA10 단기 MA 장기 MA 상향 교차
MA 데드크로스 매도 sell MA CROSS_DOWN MA5 → MA10 단기 MA 장기 MA 하향 교차
RSI 과매도 매수 buy RSI LTE RSI_VALUE → OVERSOLD_30 RSI ≤ 30 (과매도 구간 체류, 교차 아님)
RSI 과매수 매도 sell RSI GTE RSI_VALUE → OVERBOUGHT_70 RSI ≥ 70
MACD 상향 돌파 buy MACD CROSS_UP MACD_LINE → SIGNAL_LINE MACD 시그널선 골든크로스
MACD 하향 돌파 sell MACD CROSS_DOWN MACD_LINE → SIGNAL_LINE MACD 데드크로스
볼린저 하단 돌파 매수 buy BOLLINGER CROSS_UP CLOSE → LOWER_BAND 종가 하단밴드 상향 돌파 (반등)
볼린저 상단 돌파 매도 sell BOLLINGER CROSS_UP CLOSE → UPPER_BAND 종가 상단밴드 상향 돌파 (과열 이탈)
CCI 과매도 반등 buy CCI CROSS_UP CCI_VALUE → OVERSOLD_NEG100 CCI 100선 상향 돌파
심리도 과매도 반등 매수 buy PSY CROSS_UP PSY_VALUE → OVERSOLD_25 심리도 25선 상향 돌파
스토캐스틱 골든크로스 buy STOCH CROSS_UP STOCH_K → STOCH_D %K %D 상향 교차
ADX 중앙선 상향 돌파 buy ADX CROSS_UP ADX_VALUE → ADX_25 ADX 25선 상향 돌파
9일 신고가 돌파 buy NEW_HIGH CROSS_UP CLOSE → NH_PRIOR_9 종가 직전 9봉 최고가 교차
20일 신고가 돌파 buy NEW_HIGH CROSS_UP CLOSE → NH_PRIOR_20 종가 직전 20봉 최고가 교차
9일 신저가 이탈 sell NEW_LOW CROSS_DOWN CLOSE → NL_PRIOR_9 종가 직전 9봉 최저가 하향 교차
20일 신저가 이탈 sell NEW_LOW CROSS_DOWN CLOSE → NL_PRIOR_20 종가 직전 20봉 최저가 하향 교차

NH_PRIOR_n / NL_PRIOR_n: max(high[tn..t1]) / min(low[tn..t1])현재 봉 high/low 미포함.

4.2 복합 내장 템플릿 (kind: 'composite') — 12종

build() 함수가 AND/OR LogicNode를 반환. 적용 시 해당 탭 전체가 이 트리로 교체됩니다.

4.2.1 9·20일 신고/신저가

라벨 signal 트리 기본(relaxed) 시그널
9·20일 신고가 매수 buy AND CLOSE CROSS_UP NH_PRIOR_20
9·20일 신저가 매도 sell AND CLOSE CROSS_DOWN NL_PRIOR_20

필터 강도별 추가 leaf (편집기에서 변경 가능):

강도 매수 추가 매도 추가
strict 9일 CROSS + ADX≥25 + 거래량>MA + 고가≥20일선 ADX≥20 + 거래량>MA
balanced ADX≥18 ADX≥15
relaxed (없음) (없음)

4.2.2 33변곡

라벨 signal 트리 기본(relaxed) 시그널
33변곡 매수 buy AND EMA33 1봉 SLOPE_UP + CLOSE CROSS_UP CLOSE_MAX_33
33변곡 매도 sell OR CLOSE CROSS_DOWN CLOSE_MIN_33 (EMA 분기 생략)

balanced/strict 시 매수: EMA 2봉 변곡, 종가>EMA33, ADX·거래량 필터 추가.
매도 strict/balanced: EMA 하락+종가<EMA33 OR 채널 이탈.

4.2.3 돈천·터틀·일목 (Donchian / Ichimoku)

라벨 signal DSL 핵심 시그널
돈천 채널(20일) 매수 buy DONCHIAN CROSS_UP CLOSE → DC_UPPER_20 20일 채널 상단 돌파
돈천 채널(20일) 매도 sell DONCHIAN CROSS_DOWN CLOSE → DC_LOWER_20 20일 채널 하단 이탈
터틀 S1 매수 buy DC_UPPER_20 CROSS_UP 20일 최고가 돌파 진입
터틀 S1 청산 sell DC_LOWER_10 CROSS_DOWN 10일 최저가 이탈 청산
터틀 S2 매수 buy DC_UPPER_55 CROSS_UP 55일 최고가 돌파
터틀 S2 청산 sell DC_LOWER_20 CROSS_DOWN 20일 최저가 이탈
일목 전환/기준선 매수 buy ICHIMOKU CROSS_UP CONVERSION → BASE 전환·기준 골든크로스
일목 전환/기준선 매도 sell ICHIMOKU CROSS_DOWN CONVERSION → BASE 데드크로스

참고: 터틀 S1 매수 = 돈천 20일 매수와 동일 DSL. S1 청산만 10일 하단으로 다름.


5. 복합지표 템플릿 (~58종, 배지「복합지표」)

출처: buildCompositePaletteTemplateRowsDEFAULT_COMPOSITE_ITEMS (strategyPaletteStorage.ts)

지표 탭 복합 서브탭과 동일 항목이 템플릿 탭에도 노출됩니다.
적용 시 현재 탭 조건에 AND 병합 (applyPaletteItem).

5.1 Stoch 과열×보조 (1종)

라벨 signal 트리 시그널
Stoch 과열×보조 buy OR (Stoch≥80 ∧ 보조 CROSS_UP 중앙) (보조≥중앙 ∧ Stoch CROSS_UP 80)

기본 보조: CCI. 편집기에서 RSI·ADX 등 변경 가능.

5.2 9·20 신고/신저 · 33변곡 · 일목×BB (6종)

내장 §4.2와 동일 빌더. 템플릿 탭에서는 추가(병합) 방식만 다름.

항목 빌더 기본 시그널 요약
9·20일 신고가 매수 buildNewHigh920BuyTree 20일 신고가 CROSS + (필터)
9·20일 신저가 매도 buildNewLow920SellTree 20일 신저가 CROSS + (필터)
33변곡 매수/매도 buildInflection33Tree EMA33 변곡 + 33봉 종가 채널
일목×BB 매수 buildIchimokuBbBuyTree 26봉 전 후행 vs 26봉 전 BB 상한 CROSS_UP
일목×BB 매도 buildIchimokuBbSellTree 26봉 전 후행 vs 26봉 전 BB 하한 CROSS_DOWN

5.3 일목 상황별 (23종)

빌더: ichimokuSituationStrategy.tsBUILDERS[situationId][mode]

ID 라벨(요) signal 논리 leaf 조건 (동일 봉 AND/OR)
GOLDEN_CROSS 골든크로스 매수 buy AND 전환 CROSS_UP 기준
BASE_BREAKUP 기준선 돌파 매수 buy AND 종가 CROSS_UP 기준선
CLOUD_BREAKUP 구름 돌파 매수 buy AND CLOUD_BREAK_UP
LAGGING_BULL 후행 호전 매수 buy AND 후행 > 26봉 전 종가
CLOUD_SUPPORT 구름 지지 매수 buy AND 종가>선행1 종가>기준선
HOJEON 호전(정배열) 매수 buy AND 전환>기준 + 구름 위 + 양운 + 후행>종가
DEAD_CROSS 데드크로스 매도 sell OR 전환 CROSS_DOWN 기준
BASE_BREAKDOWN 기준선 이탈 매도 sell OR 종가 CROSS_DOWN 기준선
CLOUD_BREAKDOWN 구름 이탈 매도 sell OR CLOUD_BREAK_DOWN
LAGGING_BEAR 후행 역전 매도 sell OR 후행 < 26봉 전 종가
CLOUD_RESISTANCE 구름 저항 매도 sell AND 종가<선행1 종가<기준선
SANYAKU_REVERSE 삼역역전 매도 sell AND 전환<기준 + 구름 아래 + 후행 역전
GYEOKJEON 역전(역배열) 매도 sell AND 전환<기준 + 구름 아래 + 음운 + 후행 역전
EW1 1파 매수 buy AND 종가>기준 CROSS + 전환>기준
EW2 2파 매수/손절 buy/sell AND/OR 매수: 기준·선행2 지지+전환>기준 / 매도: 기준 이탈 OR 구름 이탈
EW3 3파 매수 buy AND 전환>기준 + 구름 위 + 후행 + 양운
EW4 4파 재매수/익절 buy/sell AND/OR 매수: 선행1·전환 지지 / 매도: 기준·구름 이탈
EW5 5파 분할매도 sell OR 종가<전환 OR 데드 OR 구름 이탈
EW_A A파 매도 sell OR 기준·데드 이탈
EW_B B파 매도 sell AND 기준 아래 + 구름 아래 + 전환<기준
EW_C C파 매도 sell AND 구름 이탈 + 구름 아래 + 전환<기준 + 후행 역전

5.4 추천 안정형 (18종)

빌더: stableStrategyPairs.ts — 기본 필터 relaxed

strategyId 매수 핵심 매도 핵심 relaxed 시그널
TURTLE_S1 DC_UPPER_20 CROSS_UP DC_LOWER_10 CROSS_DOWN §4.2.3과 동일
TURTLE_S2 DC_UPPER_55 CROSS_UP DC_LOWER_20 CROSS_DOWN 장기 터틀
DONCHIAN_20 DC_UPPER_20 CROSS_UP DC_LOWER_20 CROSS_DOWN 20일 채널
MA_TREND MA20 CROSS_UP MA60 MA20 CROSS_DOWN MA60 OR 종가<MA20 이평 추세
ICHIMOKU_TREND 전환/기준 CROSS_UP CROSS_DOWN OR 구름 아래(balanced+) 일목 추세
ICHIMOKU_SANYAKU 구름 돌파 + (종가>전환 등) 전환/기준/구름 하향 CROSS OR 삼역호전
ICHIMOKU_PERFECT 전환>기준 + 구름 위 전환<기준 + 구름 아래 5원소(양운·후행은 strict)
MACD_MOMENTUM MACD CROSS_UP MACD CROSS_DOWN OR 종가<EMA60 모멘텀
BOLLINGER_RANGE RSI≤30 + ADX약 + 하단밴드 CROSS_UP RSI≥70 OR 상단밴드 CROSS_UP 박스권

필터 강도 (strict/balanced) 추가 예:

전략 strict 추가
TURTLE / DONCHIAN 매수 ADX≥25 + 거래량>MA
MA_TREND 매수 ADX≥25 + 거래량>MA
ICHIMOKU_SANYAKU 매수 EXISTS_IN 윈도우(12~26봉) + MA60·거래량
MACD_MOMENTUM 매수 EMA60 위 + ADX·거래량

5.5 동일 지표 2기간 교차 (10종)

적용: makeNode(..., { composite: true }) — 현재 매수/매도 탭에 따라 CROSS_UP / CROSS_DOWN.

left → right (기본 기간) 시그널
돈치안 DC_UPPER_9 CROSS DC_UPPER_20 단기 채널상단장기 상단 돌파
RSI RSI_VALUE_9 CROSS RSI_VALUE_18 단기 RSI 장기 RSI 교차
CCI CCI_VALUE_9 CROSS CCI_VALUE_26 동일 패턴
ADX ADX_VALUE_14 CROSS ADX_VALUE_28 동일
Williams %R WILLIAMS_R 14 vs 28 동일
TRIX TRIX 12 vs 24 동일
VR VR 26 vs 52 동일
심리도 / 투자심리도 설정 기간 ×2 동일
이격도 dispShort vs dispMid 동일

기간은 보조지표 설정(DefType)에서 상속.


6. 횡보지표 템플릿 (52종, 배지「횡보지표」)

출처: buildSidewaysPaletteTemplateRowsDEFAULT_SIDEWAYS_FILTER_ITEMS

적용: buildSidewaysFilterLogic(templateId, mode, def)현재 탭에 AND 병합.

mode LogicNode 시그널 해석
include 필터 leaf 그대로 횡보일 때 true — 횡보 구간 포함 필터
exclude NOT(필터 leaf) 추세일 때 true — 횡보 제외

템플릿 탭 signal 표시: include → buy, exclude → sell (UI 라벨용; 실제로는 필터 노드이며 단독 매매 시그널이 아님).

6.1 카테고리별 시그널 조건

카테고리 대표 템플릿 true = 횡보(include)
ADX ADX < 25 ADX < 25 (비추세)
ADX ≥ 25 (exclude) 추세 — NOT으로 횡보 제외
볼린저 BB 수축 상·하단 간격 DIFF_LT (Squeeze)
종가 ≈ 중심 종가 MIDDLE_BAND
MA MA5≈MA20 MA 스프레드 DIFF_LT
일목 구름 안 IN_CLOUD
Donchian 9/20일 채널 좁음 DC_UPPER DC_LOWER DIFF_LT
오실레이터 RSI 40~60 RSI GTE 40 ∧ LTE 60
cycle Stoch 20봉 침체 LOWEST_LTE %K ≤ 20 (lookback 20)
DMI +DI ≈ DI PDIMDI DIFF_LT
volume 거래량 < MA VOLUME LT VOLUME_MA
combo ADX+구름+RSI 위 조건 AND (3중 횡보)

실전 조합 예:

매수 = AND( MA 골든크로스,  NOT「ADX<25」 )   ← exclude ADX≥25 = 추세에서만 매수
매수 = AND( RSI 과매도,       「RSI 40~60」 )   ← include = 횡보 확인 (드묾)

전체 52항목 ID·설명은 sidewaysFilterPalette.ts DEFAULT_SIDEWAYS_FILTER_ITEMS 참고.


7. 내 템플릿 (사용자 저장)

저장: 현재 매수 또는 매도 탭의 EditorConditionState + orphans 스냅샷.

필드 의미
signal buy / sell — 적용 시 해당 탭만 채움
editorState.root LogicNode 트리
orphans 캔버스 고아 노드

시그널: 저장 시점 DSL 그대로 StrategyDslToTa4jAdapter 평가.
내용은 사용자가 만든 AND/OR/CONDITION 조합이므로, leaf별로 §3 공통 규칙 적용.

적용: 반대 탭·고아 초기화 후 전체 교체 (applyUserTemplate).


8. 내장 vs 복합지표 중복

다음 항목은 내장 템플릿복합지표 템플릿둘 다 나타날 수 있습니다.

항목 차이
9·20 신고/신저, 33변곡, 터틀, 돈천, 일목 전환/기준 DSL 동일
적용 방식 내장 = 탭 교체 / 복합 = AND 추가

숨김: 템플릿 삭제 → hiddenBuiltinTemplateIds에 key 저장 (복원 가능).


9. 차트까지의 평가 경로

[템플릿 적용]
        ↓
buyConditionJson / sellConditionJson (전략 저장)
        ↓
StrategyDslToTa4jAdapter.toRule(buy) / toRule(sell)
        ↓
BacktestingService · StrategyEvaluationChart · LiveConditionStatusService
        ↓
isSatisfied(i) === true → 봉 i에 BUY/SELL 마커
기능 템플릿 사용처
전략편집기 템플릿 탭 적용 → 편집 후 전략 저장
전략평가 템플릿 선택 → [템플릿] {라벨} 임시 전략 생성
실시간 저장된 전략 DSL → 분봉 마감 시 TriggerBranch 평가

10. 템플릿별 시그널 빠른 참조

템플릿 유형 대표 예 한 줄 시그널
단순 내장 MA 골든크로스 이평 교차 1봉
단순 내장 RSI 과매도 RSI ≤30 수준
단순 내장 20일 신고가 직전 20봉 고가 CROSS_UP
복합 내장 9·20 신고가 20일 CROSS + (선택 필터) AND
복합 내장 터틀 S1 20일 돌파 매수 / 10일 이탈 매도
복합지표 Stoch×CCI 과열+보조 OR 조합
복합지표 일목 EW3 4~5 일목 leaf AND
복합지표 MA 추세 MA20/60 + (ADX)
복합지표 RSI 2기간 RSI 단기 장기 CROSS
횡보 ADX<25 include 횡보 필터 (타 조건과 AND)
횡보 ADX≥25 exclude 추세만 통과 NOT
내 템플릿 (사용자) 저장 DSL 그대로

11. 코드 인덱스

영역 경로
템플릿 목록 병합 frontend/src/utils/strategyTemplateList.ts
내장 28종 정의 frontend/src/utils/strategyPresets.ts
복합·횡보 행 변환 frontend/src/utils/strategyEditorTemplatePaletteRows.ts
템플릿 UI frontend/src/components/strategyEditor/TemplatePaletteTab.tsx
적용 (편집기) frontend/src/components/StrategyEditorPage.tsxhandleTemplateApply
적용 (전략평가) frontend/src/utils/strategyEvaluationTemplateApply.ts
9·20 / 33변곡 priceExtremeBreakoutPair.ts, inflection33Strategy.ts
Stoch×보조 stochOverboughtPair.ts
일목×BB ichimokuBbStrategy.ts
일목 23상황 ichimokuSituationStrategy.ts
안정형 18 stableStrategyPairs.ts
2기간 교차 compositeIndicators.ts
횡보 52 sidewaysFilterPalette.ts
사용자 템플릿 strategyTemplateStorage.ts
Rule 변환 backend/.../StrategyDslToTa4jAdapter.java

문서 버전: 2026-06 — goldenChart 전략편집기 템플릿 탭·strategyPresets 기준