
이중 지수 이동 평균 교차 전환 탈퇴 전략은 두 개의 다른 주기 EMA 라인 ((5주기 및 21주기) 의 교차 신호를 기반으로 한 정량 거래 전략이다. 이 전략은 단기 EMA와 장기 EMA 사이의 금고 및 사각지대를 식별하여 시장 추세의 변화점을 포착하여 트렌드 추적 거래를 구현한다. 단기 EMA를 상향으로 가로질러 금고가 형성되면 다중 신호가 발생하고; 단기 EMA를 하향으로 가로질러 장기 EMA가 형성되어 사각지대가 발생하면 공백 신호가 발생한다. 이 전략은 교차 신호가 발생했을 때 역 포지션을 평면화하고 새로운 포지션을 구축하여 완전히 자동화된 트렌드 추적 거래를 구현한다.
이 전략의 핵심 원칙은 이동 평균 교차 신호를 기반으로 시장 추세의 전환점을 식별하는 것이다. 구체적으로 다음과 같이 구현된다:
이 전략은 트렌드 추적의 아이디어를 채택하여 이동 평균을 교차하여 트렌드 방향의 변화를 확인하고 트렌드 확인 후 트렌드에 따라 해당되는 방향을 설정합니다. EMA 지표는 가격 변화에 대한 반응에 더 민감하며 단순한 이동 평균보다 더 빨리 트렌드의 변화를 포착 할 수 있습니다.
코드의 심층적인 분석을 통해, 이 전략은 다음과 같은 중요한 장점을 가지고 있다:
이 전략은 합리적으로 설계되었지만, 다음과 같은 잠재적인 위험들이 있습니다.
흔들리는 시장 위험: 가로판 흔들리는 시장에서 EMA 교차 신호가 자주 발생하여 가짜 신호가 발생하여 연속적인 스톱 손실이 발생할 수 있습니다.
지연 위험: EMA가 빠르게 반응하지만, 지연 지표로서 약간의 지연이 남아 있으며, 트렌드가 끝난 후에 신호를 보낼 수 있습니다.
자금 관리 위험: 100%의 계정 순액을 사용하여 거래하는 전략, 높은 레버리지, 연속적인 손실이 발생하면 계정 순액이 크게 줄어들 수 있습니다.
중단 메커니즘의 부재: 코드에 명확한 중단 설정이 없으며, 극단적인 시장 조건에서 더 큰 손실이 발생할 수 있습니다.
이익 보호의 부재: 스톱 또는 이동식 스톱을 설정하지 않고, 이미 얻은 이익을 회수할 수 있습니다.
코드의 심층적인 분석을 바탕으로, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다:
트렌드 필터를 추가: ADX 지표를 도입하여 약한 트렌드 시장의 거래 신호를 필터링하고, ADX가 특정 하락값 (예: 20) 보다 크면만 거래를 실행하여, 흔들리는 시장의 가짜 신호를 줄여줍니다. 이러한 최적화는 승률을 효과적으로 향상시킬 수 있습니다. 이동 평균 전략이 강한 트렌드 시장에서 더 잘 작동하기 때문입니다.
다이내믹 스톱을 실행: ATR 기반의 다이내믹 스톱을 추가하여 시장의 변동성에 따라 자동으로 스톱 위치를 조정할 수 있으며, 위험을 통제하면서도 스톱이 너무 밀리므로 조기 종료되지 않습니다. 이것은 장기 동향을 추적하는 데 특히 가치가 있습니다.
최적화 EMA 매개 변수: 매개 변수 최적화를 통해 3과 15, 8과 34과 같은 다양한 EMA 주기 조합을 테스트하여 특정 시장 환경에서 더 잘 작동하는 매개 변수를 찾을 수 있습니다. 다른 시장과 시간 프레임에는 다른 최적화 매개 변수가 필요할 수 있습니다.
부분 수익 메커니즘을 도입한다: 수익이 특정 수준에 도달했을 때 (예를 들어 2 배의 ATR), 수익을 고정하는 일부 포지션을 평행할 수 있으며, 나머지 포지션은 추세를 추적하는 것을 계속 할 수 있다. 이것은 큰 추세를 잡는 능력을 유지하면서 전체 수익 안정성을 향상시킬 수 있다.
거래 시간 필터를 추가합니다. 특정 시점에 과도한 변동성이 있거나 유동성이 부족한 시장은 거래 시간 창을 설정하여 시장이 가장 활발하고 안정적인 시간에만 거래 할 수 있습니다. 이것은 높은 변동성 또는 저효율의 시장 환경을 피하는 데 도움이됩니다.
포지션 관리 전략을 구현: 현재 고정 비율의 포지션 관리 방법을 개선하여, 변동성에 기반한 포지션 조정 방식을 채택하여, 변동성이 높은 시장 환경에서 포지션을 줄이고, 반대로 포지션을 증가시켜 리스크 의 일관성을 유지한다.
2차 확인 지표 추가: RSI, 무작위 지표 또는 MACD와 같은 다른 기술 지표와 결합하여 2차 확인으로, 여러 지표가 같은 방향으로 표시되면 거래가 수행되며 신호 품질이 향상됩니다.
이중 지수 이동 평균 교차 전환 탈퇴 전략은 5주기 및 21주기 EMA의 교차 신호를 식별하여 시장 추세 전환점을 포착하는 간결하고 효율적인 트렌드 추적 거래 시스템입니다. 이 전략은 명확하게 작동하고 자동화를 수행하며 객관적으로 신호를 생성하며 중·장기 추세가 뚜렷한 시장 환경에 적합합니다.
흔들리는 시장에서 잘못된 신호의 위험과 약간의 지연이 있음에도 불구하고, 트렌드 강도 필터링, 최적화 파라미터 선택, 다이내믹 스톱로드 구현 및 포지션 관리 개선 등의 방법을 통해 전략의 안정성과 수익성을 크게 향상시킬 수 있습니다. 완전히 자동화된 트렌드 추적 시스템을 찾는 거래자에게는 개인 위험 선호도와 거래 스타일에 따라 추가 조정 및 최적화를 할 수있는 이상적인 기본 프레임 워크입니다.
특히 주목할 점은, 이 전략과 시장 구조 분석, 기본적 필터링 또는 계절 분석과 같은 방법을 결합함으로써, 다양한 시장 환경에서 경쟁력을 유지하기 위해 더 포괄적인 거래 시스템을 구축할 수 있다는 것입니다.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-06 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("EMA Cross Strategy with EMA Turning Exit", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)
// 定义EMA参数
ema5 = ta.ema(close, 5)
ema21 = ta.ema(close, 21)
// 绘制EMA线
plot(ema5, color=color.blue, title="EMA 5", linewidth=1)
plot(ema21, color=color.red, title="EMA 21", linewidth=1)
// 定义金叉和死叉条件
goldCross = ta.crossover(ema5, ema21)
deadCross = ta.crossunder(ema5, ema21)
// 在图表上标记交叉信号
plotshape(goldCross, title="Golden Cross", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.normal)
plotshape(deadCross, title="Death Cross", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.normal)
// 执行交易策略
// 开多单条件:金叉信号且无多头仓位
if (goldCross and strategy.position_size <= 0)
strategy.close("Short") // 平掉空头仓位(如果有)
strategy.entry("Long", strategy.long)
// 开空单条件:死叉信号且无空头仓位
if (deadCross and strategy.position_size >= 0)
strategy.close("Long") // 平掉多头仓位(如果有)
strategy.entry("Short", strategy.short)
// 显示策略参数和状态
var table t = table.new(position.top_right, 2, 3, bgcolor=color.white)
table.cell(t, 0, 0, "EMA Fast", text_color=color.blue)
table.cell(t, 1, 0, "5", text_color=color.blue)
table.cell(t, 0, 1, "EMA Slow", text_color=color.red)
table.cell(t, 1, 1, "21", text_color=color.red)
table.cell(t, 0, 2, "Net Profit", text_color=color.black)
table.cell(t, 1, 2, str.tostring(strategy.netprofit), text_color=color.black)