이더리움 거래에 대한 슈퍼 트렌드 전략

저자:차오장, 날짜: 2024-01-08 14:35:37
태그:

img

전반적인 설명

이 전략은 슈퍼트렌드 지표에 기반하고 있으며 코인베이스 거래소에서 ETH/USD 거래 쌍에서 실행할 수 있습니다.

전략 논리

이 전략은 트렌드 방향을 결정하기 위해 고전적인 트렌드 추적 지표인 슈퍼 트렌드 지표를 사용합니다. 슈퍼 트렌드 지표는 두 개의 라인으로 구성됩니다.

  1. 상향 트렌드 스톱 로스 라인 (uptrend stop loss line) 은 상향 트렌드에서 긴 포지션을 보유하기 위한 것이다.
  2. 하락 트렌드 스톱 로스 라인 하락 트렌드에서 짧은 포지션을 유지하기 위해.

가격이 상승 추세에서 하락 추세로 전환되면, 짧은 포지션을 개척합니다. 가격이 하락 추세에서 상승 추세로 전환되면, 긴 포지션을 개척합니다.

또한, 전략은 스톱 로스 라인을 동적으로 조정하기 위해 ATR 지표를 사용합니다. 구체적으로, 상승 트렌드 스톱 로스 라인 포지션은 가장 높은 최고와 가장 낮은 낮은 마이너스 ATR의 평균을 계수로 곱합니다. 하락 트렌드 스톱 로스 라인 포지션은 가장 높은 최고와 가장 낮은 ATR의 평균을 계수로 곱합니다. 이것은 시장 변동성에 따라 스톱 로스를 조정 할 수 있습니다.

엔트리 신호가 발사된 후, 만약 가격이 스톱 로스 라인을 넘어선다면, 손실을 멈추게 됩니다.

장점

이것은 다음과 같은 장점을 가진 전략에 따라 비교적 성숙한 경향입니다.

  1. 슈퍼트렌드 지표를 사용하여 트렌드 방향을 안정적으로 결정합니다.
  2. 위험의 효율적인 통제를 위해 적응형 ATR 스톱 손실을 적용합니다.
  3. 단순하고 명확한 전략 논리, 이해하기 쉽고 수정하기 쉽습니다.
  4. 높은 변동성 있는 암호화폐 시장에서 수익성이 높습니다.

위험성

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

  1. 수퍼트렌드 지표가 잘못 판단될 확률은 불필요한 손실을 초래할 수 있습니다.
  2. ATR 스톱 로즈는 너무 공격적이거나 가격 반전으로 중단될 수 있습니다.
  3. 암호화폐 시장의 높은 변동성은 스톱 로스가 발생할 확률을 높여줍니다.
  4. 일부 거래소에서 거래 수수료가 높으면 최종 수익성에 영향을 미칩니다.

위의 위험을 완화하기 위해 ATR 계수를 조정하거나 다른 지표와 함께 필터를 추가 할 수 있습니다. 중지 손실 버퍼도 고려 할 수 있습니다.

개선 방향

추가 개선의 여지가 있습니다.

  1. 신호 정확성을 높이기 위해 더 많은 지표를 도입해야 합니다.
  2. ATR 길이와 계수를 위한 최적값을 조사합니다.
  3. 리스크/이익 비율에 기초한 역동적인 포지션 크기를 구현합니다.
  4. 더 많은 암호화 거래 쌍에서 전략의 효과를 테스트합니다.

결론

전체적으로 이것은 성숙하고 신뢰할 수있는 트렌드 다음 전략입니다. 트렌드 방향을 결정하기 위해 슈퍼 트렌드 지표를 사용하고 수익을 창출하는 동안 위험을 제어하기 위해 ATR로 스톱 로스를 조정합니다. 이 전략은 이더리움과 같은 높은 변동성 암호화폐에 잘 작동합니다. 추가 최적화는 안정적인 오버 퍼포먼스를 위해 더 많은 시장에 응용 프로그램을 확장 할 수 있습니다.


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

//@version=4 
strategy("SuperTrend Strategy", 
     overlay=true, 
     initial_capital=2e3, 
     process_orders_on_close=true, 
     commission_type=strategy.commission.percent, 
     commission_value=0.1 
     ) 
  
length = input(title="ATR Period", type=input.integer, defval=21) 
mult = input(title="ATR Multiplier", type=input.float, step=.25, defval=6.2) 
wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=false) 
  
useDate = input(title="Start from Specific Date ?", defval=false) 
yearStart = input(title="Start Year", defval=2019) 
monthStart = input(title="Start Month", minval=1, maxval=12, defval=1) 
dayStart = input(title="Start Day", minval=1, maxval=31, defval=1) 
  
startTime = timestamp(yearStart, monthStart, dayStart, 0, 0) 
startFrom = useDate ? time(timeframe.period) >= startTime : true 
  
atr = mult * ta.atr(length) 
  
longStop = hl2 - atr 
longStopPrev = nz(longStop[1], longStop) 
longStop := (wicks ? low[1] : close[1]) > longStopPrev ? math.max(longStop, longStopPrev) : longStop 
  
shortStop = hl2 + atr 
shortStopPrev = nz(shortStop[1], shortStop) 
shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop 
  
dir = 1 
dir := nz(dir[1], dir) 
dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : close) < longStopPrev ? -1 : dir 
  
longColor = color.green 
shortColor = color.red 
  
plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor) 
plotshape(dir == 1 and dir[1] == -1 ? longStop : na, title="Long Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0) 
  
plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor) 
plotshape(dir == -1 and dir[1] == 1 ? shortStop : na, title="Short Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0) 
  
longCondition = dir[1] == -1 and dir == 1 
if longCondition and startFrom 
    strategy.entry("Long", strategy.long, stop=longStop) 
else 
    strategy.cancel("Long") 
  
shortCondition = dir[1] == 1 and dir == -1 
if shortCondition and startFrom 
    strategy.entry("Short", strategy.short, stop=shortStop) 
else 
    strategy.cancel("Short")
    

더 많은