이 전략은 두 이동 평균의 차이에 기초하여 거래 신호를 생성합니다. 빠른 선이 느린 선 위에 넘을 때 구매 신호가 생성됩니다. 빠른 선이 느린 선 아래에 넘을 때 판매 신호가 생성됩니다. 트렌드 다음 전략의 범주에 속합니다. 전략은 간단하고 이해하기 쉽고 중장기 거래에 적합합니다.
이 전략은 서로 다른 매개 변수와 함께 두 EMA 사이의 차이를 계산하고, 그 다음 이 차이를 기반으로 다른 EMA를 계산하여 거래 신호를 생성합니다. 구체적으로, 기간을 선택하여, 기간/2의 EMA를 2 배로 계산하고, 기간의 EMA를 느린 라인으로 계산합니다. 이 두 EMA 사이의 차이는 차이 값의 차이를 구성합니다. 그 다음 사각형 (sqrt)) 기간의 기간을 기반으로 디프의 EMA를 계산하여 지표 라인 (n1) 을 생성합니다. n1이 0을 넘을 때 구매 신호가 생성됩니다. 따라서 n1이 0을 넘을 때 판매 신호가 생성됩니다. n1은 가격 추세를 파악하는 데 사용할 수있는 디프의 트렌드 방향을 반영합니다.
이 전략은 간단하고 직접적입니다. 이중 이동 평균 차이 지표를 사용하여 가격 추세를 판단합니다. 이것은 전형적인 트렌드 다음 전략에 속합니다. 트렌딩 시장에서 잘 작동하지만 범위 제한 시장에서 잘못된 신호를 생성 할 수 있습니다. 올바른 트렌드 판단과 위험 관리는 전략과 함께 사용해야합니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
전략 논리는 간단하고 직관적이며 이해하기 쉽고 실행하기 쉽고 초보자에도 적합합니다.
이동 평균 차이 지표는 가격 변화에 민감하며 트렌드 변화를 효과적으로 파악할 수 있습니다.
전략은 몇 가지 매개 변수를 가지고 있으며 실제 거래에서 최적화하고 조정하기가 쉽습니다.
장기 및 단기 지표는 다른 시장 환경에 적응하기 위해 결합될 수 있습니다.
스톱 로스 전략은 손실을 줄이기 위해 개인의 위험 선호도에 따라 구성될 수 있습니다.
이 전략은 또한 다음과 같은 위험을 가지고 있습니다.
범위에 묶인 시장에서 더 높은 잘못된 신호 비율, 더 큰 시간 프레임 트렌드를 고려해야합니다.
트렌드 반전 포인트를 효과적으로 결정할 수 없으므로, 일정 지연이 있습니다.
차이 지표의 매개 변수는 너무 민감하거나 지연되는 것을 방지하기 위해 모니터링되어야 합니다.
높은 거래 빈도는 더 높은 거래 비용을 초래할 수 있습니다. 위치 사이징은 통제가 필요합니다.
이에 대응하는 해결책은 다음과 같습니다.
주요 트렌드를 결정하기 위해 긴 기간 이동 평균을 결합하고, 범위를 잘못 입력하는 것을 피하십시오.
진입점과 출구점을 결정하기 위해 반전 지표를 추가하여 지연 위험을 줄입니다.
최적의 매개 변수를 찾기 위해 매개 변수 조합을 테스트합니다.
거래당 손실을 줄이기 위해 스톱 로스 전략을 최적화합니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
다양한 이동 평균 매개 변수 조합을 테스트하여 최적의 매개 변수를 찾습니다.
트렌드 판단 지표를 추가하여 트렌드 및 범위 시장의 차이를 구별합니다.
입력 정확도를 높이기 위해 역행 지표를 결합합니다.
손실을 줄이기 위해 스톱 로스 전략을 최적화하십시오.
다른 기간 매개 변수를 테스트하면 다른 시장 조건에 대한 전략의 적응력을 향상시킬 수 있습니다. 트렌드 필터를 추가하면 잘못된 신호를 줄일 수 있습니다. 역전 지표는 엔트리의 타이밍을 향상시킬 수 있습니다. 이러한 최적화는 전략의 안정성과 수익성을 향상시킬 수 있습니다.
이동 평균 차이에 기반한 트렌드 다음 전략은 명확하고 이해하기 쉬운 논리를 가지고 있습니다. 이중 이동 평균 차이로 가격 트렌드를 판단함으로써 전형적인 트렌드 추격 전략에 속합니다. 전략 자체는 매우 간단하고 구현하기가 쉽습니다. 중장기 거래에 적합합니다. 특히 초보자가 공부하기 위해 적합합니다. 그러나 최적화를 통해 감소해야하는 전략의 특정 위험도 있습니다. 적절한 매개 변수 조정 및 위험 통제로 전략은 좋은 결과를 얻을 수 있습니다.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='Devick', overlay=true) // Input parameters period = input(title='Period', defval=21) // Calculate moving averages n2ma = 2 * ta.ema(close, math.round(period / 2)) nma = ta.ema(close, period) diff = n2ma - nma sqn = math.round(math.sqrt(period)) n2maPrev = 2 * ta.ema(close[1], math.round(period / 2)) nmaPrev = ta.ema(close[1], period) diffPrev = n2maPrev - nmaPrev sqnPrev = math.round(math.sqrt(period)) n1 = ta.ema(diff, sqn) n2 = ta.ema(diffPrev, sqnPrev) // Determine color based on condition maColor = n1 > n2 ? color.green : color.red // Plot moving average ma = plot(n1, color=maColor, linewidth=2) // Signals buySignal = n1 > n2 and n1[1] <= n2[1] sellSignal = n1 <= n2 and n1[1] > n2[1] // Plot shapes for signals plotshape(series=buySignal, title='Buy Signal', style=shape.arrowup, location=location.belowbar, color=color.green, size=size.small) plotshape(series=sellSignal, title='Sell Signal', style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small) // Alerts alertcondition(condition=buySignal, title='Buy Signal', message='Buy Signal Detected') alertcondition(condition=sellSignal, title='Sell Signal', message='Sell Signal Detected') // Trading hours openHour = 16 closeHour = 17 // Open position at 4 pm openCondition = hour == openHour and minute == 0 strategy.entry("Buy", strategy.long, when=buySignal) strategy.entry("Sell", strategy.short, when=sellSignal) // Close all positions at 5 pm closeCondition = hour == closeHour and minute == 0 strategy.close_all(when=closeCondition)