이 전략은 이동 평균 (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))