추세와 이동평균선 기반의 양적 거래 전략
개요
해당 전략의 명칭은 "Trend Following with EMA"로, 추세와 이동평균선을 기반으로 한 정량적 거래 전략입니다. 이 전략은 추세 추적과 지수 이동평균(EMA) 두 가지 기술적 지표를 결합하여 주식 또는 기타 금융 상품의 가격 추세를 식별하고, 이에 따라 매수 및 매도 작업을 수행합니다.
전략 원리
해당 전략의 주요 논리는 다음과 같습니다.
-
180주기 저점과 종가의 교차를 사용하여 가격 상승 추세를 판단합니다. 저점이 종가를 상향 돌파하면 가격이 상승하기 시작하여 추세를 형성한다는 의미이므로, 이때 매수(long)합니다.
-
가격이 하락 추세에서 상승 추세로 전환될 때, 즉 종가가 시가를 상향 돌파하고 EMA선 아래에 있을 때도 매수합니다.
-
가격이 상승 추세에서 하락 추세로 전환될 때, 즉 종가가 시가를 하향 돌파하면 매수 포지션을 청산합니다.
-
180주기 고점과 EMA의 교차를 사용하여 가격 하락 추세를 판단합니다. 고점이 EMA선을 하향 돌파하고 고점이 EMA선 아래에 있을 때 매도(short)합니다.
-
가격이 상승 추세에서 하락 추세로 전환될 때, 즉 종가가 시가를 하향 돌파하고 EMA선 위에 있을 때도 매도합니다.
-
가격이 하락 추세에서 상승 추세로 전환될 때, 즉 종가가 시가를 상향 돌파하면 매도 포지션을 청산합니다.
전략 장점 분석
이 전략은 추세 추적과 이동평균선 지표를 결합하여 가격 추세의 전환점을 효과적으로 포착할 수 있으며, 다음과 같은 장점이 있습니다.
- 추세 추적 부분은 가격 추세의 방향을 확정하여 오류 발생 확률을 줄여줍니다.
- 이동평균선 부분은 가격의 작은 변동 노이즈를 효과적으로 필터링하여 더 큰 폭의 추세를 식별할 수 있습니다.
- 두 가지 지표를 결합하면 거래 신호의 신뢰성을 높이고 허위 양성(false positive)을 방지할 수 있습니다.
- 매개변수 설정이 합리적이고 유연하며, 주기 길이를 조정하여 다양한 상품과 거래 스타일에 적응할 수 있습니다.
위험 분석
해당 전략에는 다음과 같은 위험도 존재합니다.
- 가격 변동이 심한 상황에서는 EMA 이동평균선에 큰 지연(lag)이 발생하여 최적의 진입 시점을 놓칠 수 있습니다.
- 추세 판단 지표는 매개변수에 민감하며, 다른 주기 설정은 거래 신호와 수익에 차이를 초래합니다.
- 매수 및 매도 포지션의 전환 빈도가 너무 높아 거래 슬리피지(slippage)와 수수료 손실이 증가할 수 있습니다.
이에 대한 위험 해결 방안은 다음과 같습니다.
- EMA 이동평균선의 주기 매개변수를 최적화하여 지연 확률을 낮춥니다.
- 매개변수 최적화를 수행하여 해당 상품에 가장 적합한 주기 매개변수를 찾습니다.
- 손절매(stop-loss) 및 이익 실현(take-profit) 조건을 설정하여 지나치게 빈번한 포지션 전환을 방지합니다.
전략 최적화 방향
해당 전략은 다음과 같은 측면에서 최적화할 수 있습니다.
- 변동성 기반 포지션 관리 모듈을 추가하여 시장 변동 상황에 따라 포지션을 동적으로 조정할 수 있습니다.
- 머신러닝 모델을 추가하여 가격 추세를 판단하고, 단순 교차 판단을 대체하여 정확도를 높입니다.
- 펀더멘털(fundamentals) 데이터를 결합하여 거래 신호를 정제하고, 기업 실적 변화 시 잘못된 신호가 발생하는 것을 방지합니다.
- 다중 상품 매개변수 최적화를 수행하여 최적의 주기 매개변수 조합을 찾고, 안정성을 높이며 수익을 극대화합니다.
요약
해당 전략은 전체적으로 전형적인 추세 추적 전략으로, 가격 자체의 특성 지표를 활용하여 방향을 판단하고 추세를 추적합니다. 단순하고 효과적이며 구현이 쉬워 정량적 거래 입문 전략으로 적합합니다. 그러나 지표 지연, 매개변수 민감성 등의 문제도 존재합니다. 이러한 문제들은 더 많은 데이터 소스를 도입하거나 머신러닝을 활용하는 등의 방식으로 개선할 수 있습니다. 따라서 이 전략은 확장 및 최적화 여지가 크며, 추천할 만한 고빈도 정량 거래 전략입니다.
/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Trend + EMA", overlay=true, initial_capital=10000, currency=currency.USD, pyramiding=0)
tim=input("180", title="Period for trend")- 1

