패러볼 SAR 트렌드 추적 전략

저자:차오장날짜: 2024-01-18 12:21:17
태그:

img

전반적인 설명

이 전략은 신호의 정확성을 향상시키기 위해 EMA 필터링과 결합한 파라볼릭 SAR (Stop and Reverse) 지표를 사용합니다. 트렌드를 거래하는 거래자에게 적합합니다.

전략 논리

긴 신호는 SAR가 가격보다 낮고 가격이 느린 EMA와 오프셋보다 높을 때 발생한다. SAR가 가격보다 높고 가격이 느린 EMA 미소 오프셋보다 낮을 때 짧은 신호가 발생한다. 빠른 EMA와 느린 EMA 사이의 크로스오버는 추가 필터링을 제공합니다. 이것은 SAR만 사용할 때 잘못된 신호를 피합니다.

특히, 긴 입국 조건은 다음과 같습니다.

  1. SAR는 이전 클로즈보다 낮고 현재 클로즈보다 높습니다
  2. 현재 클로즈는 느린 EMA와 오프셋이 더 높거나 느린 EMA보다 빠른 EMA가 넘는다.
  3. 현재 클로즈는 SAR값 이상이고 느린 EMA + 오프셋입니다.

짧은 입시 조건은 다음과 같습니다.

  1. SAR는 이전 클로즈보다 높고 현재 클로즈보다 낮습니다
  2. 현재 클로즈는 느린 EMA를 빼고 오프셋 또는 느린 EMA를 넘어서 빠른 EMA를 넘습니다.
  3. 현재 클로즈는 SAR 값과 느린 EMA 마이너스 오프셋 이하입니다.

이점 분석

SAR와 EMA 필터링을 결합하면 트렌드 방향을 잘 파악하고 잘못된 신호를 줄일 수 있습니다.

이점:

  1. SAR는 가격 변화에 빠르게 반응하고 트렌드 반전 지점을 식별할 수 있습니다.
  2. EMA 필터링은 트렌드 방향을 확인하고 SAR만 사용할 때 잘못된 신호를 피합니다.
  3. 빠른 EMA와 느린 EMA의 교차는 추가 신호 정확성을 제공합니다.
  4. 매개 변수 최적화를 통해 수익성을 향상시킬 수 있습니다.

위험 분석

이 전략에는 몇 가지 위험이 있습니다.

  1. SAR 및 EMA는 범위 제한 시장에서 잘못된 신호를 생성하여 수익성에 영향을 줄 수 있습니다. 이는 매개 변수 최적화를 통해 감소 할 수 있습니다.
  2. EMA는 지연 효과를 가지고 있으며 트렌드가 역전될 때 가장 좋은 입점점을 놓칠 수 있습니다. EMA 기간을 단축함으로써 지연 효과를 줄일 수 있습니다.
  3. 높은 변동성 동안 스톱 로스는 쉽게 타격 될 수 있으며 더 높은 손실을 유발할 수 있습니다. 스톱 로스 범위는 적절히 확장 될 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. SAR 매개 변수를 최적화해서 더 민감하게 만들 수 있습니다.
  2. 최적의 조합을 찾기 위해 느리고 빠른 EMA 기간을 최적화하십시오.
  3. 잘못된 신호를 줄이기 위해 EMA 오프셋을 최적화합니다.
  4. MACD와 KDJ와 같은 다른 지표를 추가 필터링과 정확성을 위해 추가하십시오.
  5. 거래당 손실을 줄이기 위해 스톱 로스 전략을 최적화하십시오.

결론

이 전략은 SAR와 EMA의 강점을 결합하여 유연한 트렌드 추적 시스템을 설계합니다. 전반적으로 좋은 트렌드 탐지 능력을 가지고 있으며 트렌드를 추적하는 데 잘 작동합니다. 매개 변수 최적화 및 리스크 관리의 추가 개선은 안정성과 수익성을 향상시킬 수 있습니다. 좋은 리스크 관리 인식과 최적화 기술을 가진 투자자에게 적합합니다.


/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("SAR Trend Trader Strategy By: jhanson107", shorttitle="SAR Trend Trader Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


SlowEMALength = input(100, "Slow EMA Length")
FastEMALength = input(10, "Fast EMA Length")
emaoffset = input(1.00, "EMA Offset %")
start = input(0.01)
increment = input(0.005)
maximum = input(0.08)

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

psar = sar(start, increment, maximum)
ema = ema(close, SlowEMALength)
fastema = ema(close, FastEMALength)
offset = (emaoffset / 100) * ema

// Signals
long = high[1] < psar[2] and high >= psar[1] and close > ema + offset or crossunder(ema, fastema) and close > psar and close > ema + offset
short = low[1] > psar[2] and low <= psar[1] and close < ema - offset or crossover(ema, fastema) and close < psar and close < ema - offset

// Plot PSAR
plot(psar, title="PSAR", color = low < psar and not long ? green : red, trackprice=true)

//Barcolor
barcolor(close > psar and close > ema + offset and fastema > ema ? green : na)
barcolor(close > psar and close < ema + offset or close > psar and fastema < ema ? white : na)
barcolor(close < psar and close < ema - offset and fastema < ema and close? red : na)
barcolor(close < psar and close > ema - offset or close < psar and fastema > ema ? white : na)

//Plot EMA
plot(ema, color=blue, linewidth=1, transp=0, title="Slow EMA")
plot(fastema, color=purple, linewidth=1, transp=0, title="Fast EMA")


if(high > psar)
    strategy.close("Short")
    
if(low < psar)
    strategy.close("Long")
    
if(long and time_cond)
    strategy.entry("Long", strategy.long, comment="Long")
   
if(short and time_cond)
    strategy.entry("Short", strategy.short, comment="Short")

if (not time_cond)
    strategy.close_all()

더 많은