
이 전략은 켈트너 채널 (Keltner Channel) 과 다중 지수 이동 평균 (Multiple Index Moving Average, EMA) 을 결합한 혼성 거래 시스템이다. 그것은 가격과 켈트너 채널 경계와의 상호 작용을 모니터링하여 과매매 조건을 포착하고, 단기 및 중기 EMA의 교차점을 사용하여 트렌드 동력을 확인한다. 이 이중적 접근법은 상인이 다양한 시장 조건에서 거래할 수 있도록 한다.
이 전략의 핵심은 두 가지 다른 거래 신호 시스템에 의존합니다.
켄터키 통로 역전 거래:
트렌드 추적 거래:
켄터 통로는 자체적으로 20주기의 EMA를 중간 궤도로 통과하고, 상하 궤도는 각각 중간 궤도에 1.5배의 ATR 값을 더하거나 줄입니다. 이러한 구성 방식은 통로가 시장의 변동적 역학에 따라 폭을 조정하고, 높은 변동 기간에 자동으로 확장하고, 낮은 변동 기간에 자동으로 수축 할 수 있습니다.
시스템의 위험 관리 메커니즘은 ATR 기반의 동적 중지 손실 및 수익 목표를 사용합니다.
다중 전략적 통합역전 거래와 트렌드 추적의 두 가지 전략이 결합되어 시스템이 다양한 시장 환경에서 유연성을 유지할 수 있도록 해줍니다. 단기 가격 역전을 포착하고 중장기 트렌드를 따라갈 수 있습니다.
동적 위험 관리ATR을 통해 계산된 중지 및 수익 목표는 시장의 변동성에 따라 자동으로 조정되며, 높은 변동성 기간 동안 더 넓은 중지 공간을 제공하며, 낮은 변동성 기간 동안 위험 통제를 강화합니다.
신호 확인 메커니즘: 트렌드 트레이딩 부분은 다중 조건이 동시에 충족되도록 요구합니다 ((단기 및 중기 EMA의 교차와 가격이 장기 EMA의 올바른 편에 위치합니다)) 가짜 신호를 크게 줄입니다.
매우 적응력이 좋다: 켄터 통로의 폭은 시장의 변동성에 따라 자동으로 조정됩니다. 따라서 전략은 수동으로 매개 변수를 조정하지 않고 다양한 시장 환경에 적응할 수 있습니다.
전체 거래주기전략은 입점, 출구, 중지 및 수익 조건을 명확하게 정의하여 완전한 거래 프레임 워크를 형성합니다.
자동화 된 경고: 트레이딩 뷰 알림 기능이 통합되어 있으며, 트레이딩 신호 알림을 완전히 자동화 할 수 있습니다.
가짜 침입 위험: 높은 변동성 시장에서, 가격이 켄터터 통로 경계에 자주 닿은 후 빠르게 돌아와서 거짓 반전 신호를 생성할 수 있다. 완화 방법: 가격을 통로 밖에서 일정 시간 동안 머무르거나 다른 기술 지표와 결합하여 확인 조건을 추가하는 것을 고려할 수 있다.
추세 변화 후기: EMA 교차 신호는 본질적으로 지연 지표이며, 트렌드 전환점 근처의 입출구가 적당하게 이루어지지 않을 수 있습니다. 완화 방법: 보조 확인으로 더 민감한 운동 지표를 도입하는 것이 고려 될 수 있습니다.
제약이 부족합니다.일부 극단적인 변동 상황에서는 1.5배의 ATR의 중지 손해 설정이 시장 소음에 영향을 받지 않도록 충분하지 않을 수 있습니다. 완화 방법: 특정 높은 변동 품종을 위해 중지 손해 배수를 2배 또는 그 이상으로 조정하는 것이 고려 될 수 있습니다.
다중 신호 충돌: 반전 전략과 트렌드 전략은 동시에 반대 신호를 생성하여 의사 결정에 어려움을 초래할 수 있다. 완화 방법: 신호 우선순위를 설정하거나 다른 시간 프레임에 두 가지 전략을 각각 적용할 수 있다.
매개변수 민감도전략적 성능은 켄터터 통로 곱하기 (mult) 와 EMA 주기 선택에 민감하다. 완화 방법: 실판 전에 충분한 매개 변수 최적화 및 재검토 검증을 권장한다.
거래 시간 필터를 추가합니다.거래 시간 창 필터를 추가하여 시장 개시 및 폐쇄 시기의 비정상적인 변동과 낮은 유동성 시기를 피할 수 있으며 시장이 가장 활발한 시간에 거래 신호를 실행할 수 있습니다.
변동률 판단을 도입합니다.: ATR의 상대적 역사값 판단을 증가시킬 수 있고, 변동률이 너무 높을 때 반전 거래를 중지하고, 트렌드 거래만 실행할 수 있으며, 변동률이 너무 낮을 때 반전 거래를 우선적으로 수행할 수 있다.
자금 관리 최적화: 현재 전략은 고정 비율 ((10%) 을 사용하여 포지션 관리를 수행하며, 변동율에 기반한 동적 포지션 조정으로 개선할 수 있으며, 낮은 변동율 환경에서 포지션을 증가시키고, 높은 변동율 환경에서 포지션을 감소시킵니다.
트랜잭션 필터링 조건을 추가: 더 많은 필터링 조건을 추가하여 신호 품질을 향상시킬 수 있습니다. 예를 들어:
다중 시간 프레임 분석: 더 높은 시간 프레임의 트렌드 판단을 도입하고, 높은 시간 프레임의 트렌드 방향으로만 낮은 시간 프레임 신호를 실행한다.
이윤 창출 방법을 최적화현재 고정 배수 ATR을 수익 목표로 사용하고 있으며, 트렌드 수익을 극대화하기 위해 후속 중지 메커니즘을 개선할 수 있습니다.
켄터터 통로와 EMA 혼합 거래 시스템은 역전과 트렌드 추적 신호를 결합하여 다양한 시장 환경에 적응하는 포괄적이고 유연한 거래 전략입니다. 그것의 핵심 장점은 동적인 통로 폭 조정과 ATR 기반의 위험 관리로 전략이 시장의 변동성에 대한 변화에 자동으로 적응할 수 있습니다. 그러나 전략에는 돌파구 및 신호 지연과 같은 몇 가지 고유한 위험이 있습니다.
거래 필터링 조건을 추가하고, 자금 관리를 최적화하고, 다중 시간 프레임 분석을 도입하는 등 일련의 최적화 조치를 통해 이 전략에 큰 개선의 여지가 있습니다. 거래자에게는 실장 적용 전에 다양한 시장 조건과 시간 프레임에 따라 충분한 재검토를 실시하고, 특정 거래 품종의 특성에 따라 파라미터 설정을 조정하는 것이 좋습니다.
/*backtest
start: 2024-03-26 00:00:00
end: 2024-07-22 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Keltner Channel Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Keltner Channel Settings
length = 20
mult = 1.5
emaBasis = ta.ema(close, length)
atrVal = ta.atr(length)
upperKC = emaBasis + (mult * atrVal)
lowerKC = emaBasis - (mult * atrVal)
// Entry Conditions for Different Strategies
longEntryKC = ta.crossunder(close, lowerKC)
shortEntryKC = ta.crossover(close, upperKC)
longEntryTrend = ta.crossover(ta.ema(close, 9), ta.ema(close, 21)) and close > ta.ema(close, 50)
shortEntryTrend = ta.crossunder(ta.ema(close, 9), ta.ema(close, 21)) and close < ta.ema(close, 50)
// Stop-Loss and Take-Profit Levels
atrMultiplier = 1.5
stopLossLong = close - (atrMultiplier * atrVal)
stopLossShort = close + (atrMultiplier * atrVal)
takeProfitLong = close + (2 * atrMultiplier * atrVal)
takeProfitShort = close - (2 * atrMultiplier * atrVal)
// Exit Conditions
exitLongKC = ta.crossover(close, emaBasis)
exitShortKC = ta.crossunder(close, emaBasis)
exitLongTrend = ta.crossunder(ta.ema(close, 9), ta.ema(close, 21))
exitShortTrend = ta.crossover(ta.ema(close, 9), ta.ema(close, 21))
// Plot Keltner Channels
plot(upperKC, title="Upper Keltner Band", color=color.blue)
plot(lowerKC, title="Lower Keltner Band", color=color.red)
plot(emaBasis, title="Mid Keltner Band", color=color.gray)
// Execute Trades
strategy.entry("Long_KC", strategy.long, when=longEntryKC)
strategy.close("Long_KC", when=exitLongKC)
strategy.entry("Short_KC", strategy.short, when=shortEntryKC)
strategy.close("Short_KC", when=exitShortKC)
strategy.entry("Long_Trend", strategy.long, when=longEntryTrend)
strategy.close("Long_Trend", when=exitLongTrend)
strategy.entry("Short_Trend", strategy.short, when=shortEntryTrend)
strategy.close("Short_Trend", when=exitShortTrend)
// Stop-Loss and Take-Profit Implementation
strategy.exit("Long_KC_Exit", from_entry="Long_KC", stop=stopLossLong, limit=takeProfitLong)
strategy.exit("Short_KC_Exit", from_entry="Short_KC", stop=stopLossShort, limit=takeProfitShort)
strategy.exit("Long_Trend_Exit", from_entry="Long_Trend", stop=stopLossLong, limit=takeProfitLong)
strategy.exit("Short_Trend_Exit", from_entry="Short_Trend", stop=stopLossShort, limit=takeProfitShort)
// Alerts
alertcondition(longEntryKC, title="Long Entry KC Alert", message="Price touched Lower Keltner Band - Possible Long Setup")
alertcondition(shortEntryKC, title="Short Entry KC Alert", message="Price touched Upper Keltner Band - Possible Short Setup")
alertcondition(longEntryTrend, title="Long Entry Trend Alert", message="9 EMA crossed above 21 EMA - Possible Long Setup")
alertcondition(shortEntryTrend, title="Short Entry Trend Alert", message="9 EMA crossed below 21 EMA - Possible Short Setup")