멀티 타임프레임 이동 평균 및 EMA 기반 트렌드 전략

저자:차오장, 날짜: 2024-02-21 15:59:43
태그:

img

전반적인 설명

이 전략은 이동 평균 (MA) 과 EMA를 서로 다른 시간 프레임에 걸쳐 트렌드를 식별하고 거래하기 위해 사용합니다. 다양한 기간의 SMA, EMA, 그리고 촛불체를 결합함으로써 시장 소음을 효과적으로 필터하고 낮은 위험으로 중간에서 장기 트렌드를 거래 할 수 있습니다.

전략 논리

핵심 아이디어는 가격 동력을 결정하기 위해 다른 기간의 3 개의 SMA를 비교하는 데 기반합니다. 또한 EMA는 촛불 몸체가 위로 향하는지 확인하는 데 사용됩니다.

구체적으로, 전략은 3 개의 SMA - 3-, 8- 및 10 기간 SMA를 사용합니다. 가격이 3 개의 SMA 아래로 떨어지면 하락 추세로 간주됩니다. 가격이 SMA 위에 다시 넘어가면 긴 신호가 발생합니다.

또한, 5주기 EMA는 롱 트레이드에 들어가기 전에 촛불이 위로 향하는지 확인합니다.

출구 규칙의 경우 최대 수익성 클로즈 수 또는 최대 지속 기간이 스톱 로스 메커니즘으로 사용됩니다.

이점 분석

다양한 시간 프레임의 MAs를 결합함으로써이 전략은 시장 소음을 효과적으로 필터하고 중간에서 장기적인 트렌드를 포착 할 수 있습니다. 최적화된 매개 변수는 역사적 백테스트에서 괜찮은 성능을 허용합니다.

촛불 몸의 방향을 확인하기 위해 EMA를 사용하는 것은 촛불이 떨어지는 것을 구입하는 데서 불필요한 미끄러짐을 줄입니다.

전체적으로 이것은 안정적이고 신뢰할 수 있는 시스템으로 몇 주에서 몇 달 동안의 추세에 적합합니다.

위험 및 완화

  • 이 전략은 매개 변수에 민감하다. 3개의 SMA 또는 1개의 EMA 기간의 최저 선택은 신호 품질을 악화시킬 수 있다. 매개 변수는 서로 다른 기기에 최적화되어야 한다.

  • 격차 위험은 다루지 않습니다. 격차 가격이 손실을 일으킬 수 있다는 갑작스러운 근본적인 소식. 가격 스톱 손실은 그러한 위험을 완화하는 데 도움이 될 수 있습니다.

더 나은 기회

  • 트렌드 정확성을 더욱 향상시키기 위해 MA 또는 EMA의 더 많은 시간 프레임을 추가 할 수 있습니다.

  • 중간 가격 스톱 손실은 극한 움직임에서 손실을 줄이는 동안 이익을 잠금하기 위해 테스트 할 수 있습니다.

  • 기계 학습은 변화하는 시장 조건에 적응하기 위해 매개 변수를 동적으로 최적화 할 수 있습니다.

결론

이 전략은 EMA 필터로 보완된 트렌드를 결정하기 위해 MA 크로스오버를 사용하여 전반적으로 견고하고 신뢰할 수 있습니다. 추가 매개 변수 최적화 및 신중한 위험 통제는 승률과 수익성을 향상시킬 수 있습니다. 추가 연구와 응용에 가치가 있습니다.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Free Strategy #02 (ES / SPY)", overlay=true)

// Inputs
Quantity = input(1, minval=1, title="Quantity")
SmaPeriod01 = input(3, minval=1, title="SMA Period 01")
SmaPeriod02 = input(8, minval=1, title="SMA Period 02")
SmaPeriod03 = input(10, minval=1, title="SMA Period 03")
EmaPeriod01 = input(5, minval=1, title="EMA Period 01")
MaxProfitCloses = input(5, minval=1, title="Max Profit Close")
MaxBars = input(10, minval=1, title="Max Total Bars")

// Misc Variables
src = close
BarsSinceEntry = 0
MaxProfitCount = 0
Sma01 = sma(close, SmaPeriod01)
Sma02 = sma(close, SmaPeriod02)
Sma03 = sma(close, SmaPeriod03)
Ema01 = ema(close, EmaPeriod01)

// Conditions
Cond00 = strategy.position_size == 0
Cond01 = close < Sma03
Cond02 = close <= Sma01
Cond03 = close[1] > Sma01[1]
Cond04 = open > Ema01
Cond05 = Sma02 < Sma02[1]

// Update Exit Variables
BarsSinceEntry := Cond00 ? 0 : nz(BarsSinceEntry[1]) + 1
MaxProfitCount := Cond00 ? 0 : (close > strategy.position_avg_price and BarsSinceEntry > 1) ? nz(MaxProfitCount[1]) + 1 : nz(MaxProfitCount[1])

// Entries
strategy.entry(id="L1", long=true, qty=Quantity, when=(Cond00 and Cond01 and Cond02 and Cond03 and Cond04 and Cond05))
 
// Exits
strategy.close("L1", (BarsSinceEntry - 1 >= MaxBars or MaxProfitCount >= MaxProfitCloses))

더 많은