K선 종가 기반 롱숏 비교 및 EMA 필터를 적용한 양적 거래 전략
1. 전략 개요
본 전략의 명칭은 “캔들 종가 매수/매도 비교와 EMA 필터를 활용한 퀀트 트레이딩 전략”입니다. 이 전략은 최근 특정 기간 동안 캔들의 종가로 구성된 매수 캔들과 매도 캔들의 개수를 집계하고, EMA 필터와 결합하여 거래 시간대에 따라 매수/매도 신호를 판단합니다.
2. 전략 원리
전략의 핵심 로직은 최근 lookback 기간 동안 상승 종가를 기록한 캔들 개수(upCloseCount)와 하락 종가를 기록한 캔들 개수(downCloseCount)를 집계하여, 상승 종가 개수가 많으면 강세장, 하락 종가 개수가 많으면 약세장으로 판단하는 것입니다. 동시에 EMA 지표를 사용하여 가격 추세를 판단하고 필터로 활용하며, 가격이 EMA보다 높을 때만 매수를 고려하고 가격이 EMA보다 낮을 때만 매도를 고려합니다. 또한, 전략은 거래 시간대 session1과 session2를 설정하여 이 두 시간대에만 거래합니다.
구체적인 판단 로직은 다음과 같습니다.
매수 신호 조건: inSession이 true(거래 시간대 내)이고 upCloseCount > downCloseCount(상승 종가 캔들 개수가 더 많음)이며 close > ema(종가가 EMA보다 높음)이고 currentSignal이 "long"이 아님(현재 포지션 없음)
매도 신호 조건: inSession이 true이고 downCloseCount > upCloseCount(하락 종가 캔들 개수가 더 많음)이며 close < ema(종가가 EMA보다 낮음)이고 currentSignal이 "short"이 아님(현재 포지션 없음)
3. 전략 장점 분석
- 일정 과거 기간 동안 캔들 종가의 매수/매도 비교를 통해 가격 추세와 시장 심리를 판단하여 일정한 추세 추종 효과를 냅니다.
- EMA 지표를 결합하여 가격 추세를 필터링함으로써 횡보장에서 잘못된 거래를 방지합니다.
- 특정 거래 시간대를 설정하여 주요 거래 시간대가 아닌 잡음 장세에서의 거래를 피합니다.
- 추세 추종과 빈번한 거래 사이의 균형을 유지합니다.
4. 전략 리스크 분석
- 횡보장에서는 종가의 매수/매도 비교가 오해를 불러일으키기 쉬워 불필요한 손실을 초래할 수 있습니다.
- EMA 매개변수가 적절하지 않으면 필터 효과가 떨어질 수 있습니다.
- 거래 시간대가 부적절하게 설정되면 많은 거래 기회를 놓치거나 잘못된 거래를 할 수 있습니다.
- 돌발 상황으로 인한 갭(Gap) 장세를 효과적으로 추적할 수 없습니다.
대책:
- EMA 매개변수를 최적화하여 최적의 균형을 찾습니다.
- 거래 시간대를 최적화합니다.
- 손절매 전략을 결합하여 단일 손실을 제한합니다.
5. 전략 최적화 방향
- 거래 시간대를 최적화하여 최적의 거래 시간대를 찾습니다.
- EMA 주기 및 평활도를 매개변수 최적화합니다.
- ATR 기반 손절매 메커니즘을 추가합니다.
- 돌발 상황 인식 모듈을 추가하여 갭 장세 리스크를 방지합니다.
- 다른 지표와의 조합을 고려하여 더 나은 진입 필터 조건을 찾습니다.
- 여러 상품의 성과 차이를 테스트하고 차이에 따라 매개변수를 조정합니다.
6. 요약
본 전략은 일정 과거 기간 동안 캔들 종가로 구성된 매수 및 매도 캔들 개수를 집계하고, EMA 지표의 필터 효과와 결합하여 설정된 거래 시간대 내에서 추세 신호를 식별합니다. 일정한 추세 추종 효과가 있습니다. 그러나 잘못된 거래 리스크도 존재하므로 매개변수 최적화, 손절매 전략, 신호 필터링 등의 방법으로 개선하고 백테스트를 통해 효과를 검증해야 합니다.
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Up vs Down Close Candles Strategy with EMA and Session Time Frames", shorttitle="UvD Strat EMA Session", overlay=true)
// User input to define the lookback period, EMA period, and session strings for time frames- 1

