리소스 로딩... 로딩...

EMA와 슈퍼트렌드 조합 양적 거래 전략

저자:차오장, 날짜: 2024-06-17 16:52:17
태그:EMA

img

전반적인 설명

이 전략은 파는 신호를 생성하기 위해 기하급수적인 이동 평균 (EMA) 과 슈퍼트렌드 지표를 결합합니다. 가격은 20 일간의 EMA를 넘어서고 슈퍼트렌드 지표가 상승 추세에 있을 때 구매 신호가 생성됩니다. 가격이 20 일간의 EMA를 넘어서고 슈퍼트렌드 지표가 하향 추세에 있을 때 판매 신호가 생성됩니다. 전략은 EMA를 필터링 조건으로 사용하여 잘못된 신호를 줄이기 위해 트렌딩 시장 조건을 포착하는 것을 목표로합니다.

전략 원칙

  1. 트렌드 결정의 필터링 조건으로 20일 EMA를 계산합니다.
  2. 슈퍼트렌드 인디케이터를 계산합니다. 이는 평균 진실 범위 (ATR) 와 상승/하락 트렌드를 기반으로 상부 및 하부 밴드를 그래프화합니다.
  3. 슈퍼트렌드 지표의 트렌드 방향과 20일 EMA에 대한 가격의 상대적 위치에 기초한 구매 및 판매 신호를 생성합니다.
    • 구매 신호는 가격이 20일 EMA를 넘어서고 슈퍼트렌드 지표가 상승 추세에 있을 때 생성됩니다.
    • 판매 신호는 가격이 20일 EMA 이하로 떨어지고 슈퍼트렌드 지표가 하향 추세에 있을 때 생성됩니다.
  4. 이 전략은 구매 신호로 긴 포지션을 입력하고 판매 신호로 종료합니다.

전략적 장점

  1. EMA와 Supertrend 지표를 결합함으로써 전략은 잘못된 신호를 줄이는 동시에 유행 시장 조건을 효과적으로 파악 할 수 있습니다.
  2. 슈퍼트렌드 지표는 ATR에 기반하여 상위 및 하위 대역 사이의 거리를 동적으로 조정하여 다른 시장 변동성에 적응 할 수 있습니다.
  3. 트렌드 결정의 필터링 조건으로 EMA를 사용하는 것은 트렌드 방향으로 포지션이 열리는 것을 보장하며 전략의 승률을 높입니다.
  4. 전략 논리는 간단하고 직설적이어서 이해하기 쉽고 구현하기 쉽습니다.

전략 위험

  1. 불안정한 시장에서 전략은 자주 구매 및 판매 신호를 생성하여 과도한 거래 및 거래 비용 침식으로 이어질 수 있습니다.
  2. 이 전략은 EMA와 슈퍼트렌드 지표에 의존하며, 특정 시장 조건에서 효과가 없거나 지연될 수 있습니다.
  3. 이 전략은 매우 변동적인 시장 조건에서 상당한 마감으로 이어질 수 있는 스톱 로스 및 포지션 사이즈링과 같은 위험 관리를 고려하지 않습니다.

전략 최적화 방향

  1. 거래당 최대 손실을 제어하기 위해 ATR에 기반한 동적 스톱 로스 설정과 같은 스톱 로스 메커니즘을 포함합니다.
  2. EMA와 슈퍼트렌드 지표의 매개 변수를 최적화하여 최적의 매개 변수 조합을 찾기 위해 매개 변수 최적화 방법을 사용하여 전략의 적응력과 안정성을 향상시킵니다.
  3. 전체 리스크를 관리하기 위해 시장 변동성이나 계정 이익과 손실에 따라 포지션 크기를 동적으로 조정하여 포지션 크기를 도입합니다.
  4. 다른 필터링 조건, 예를 들어 거래량, 변동성 등을 추가하는 것을 고려하여 잘못된 신호를 추가로 줄이십시오.

요약

이 전략은 트렌딩 시장 조건을 파악하는 것을 목표로 20일 EMA와 슈퍼트렌드 지표를 결합하여 구매 및 판매 신호를 생성합니다. 전략의 장점은 단순함과 EMA와 슈퍼트렌드 지표의 조합에 있으며 이는 잘못된 신호를 효과적으로 줄일 수 있습니다. 그러나 불안정한 시장에서 전략은 자주 거래 할 수 있으며 위험 관리 조치가 부족합니다. 향후 개선은 전략을 향상시키기 위해 스톱 로스, 포지션 사이징 및 매개 변수 최적화 방법을 통합하는 것을 고려할 수 있습니다. 전반적으로이 전략은 트렌딩 트렌드에 간단하고 효과적인 접근 방식을 제공하지만 실질적인 응용을 위해 추가 최적화 및 정교가 필요합니다.


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

//@version=5
strategy("20 EMA and Supertrend Strategy", overlay=true)

// Inputs
emaLength = input(20, title="EMA Length")
supertrendMultiplier = input.float(3.0, title="Supertrend Multiplier")
supertrendPeriod = input(10, title="Supertrend Period")

// EMA Calculation
ema = ta.ema(close, emaLength)

// Supertrend Calculation
Periods = supertrendPeriod
src = hl2
Multiplier = supertrendMultiplier
changeATR= input.bool(true, title="Change ATR Calculation Method?")
showsignals = input.bool(true, title="Show Buy/Sell Signals?")
highlighting = input.bool(true, title="Highlighter On/Off?")
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = na(up[1]) ? up : up[1]
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = na(dn[1]) ? dn : dn[1]
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := na(trend[1]) ? trend : trend[1]
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(series=buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(series=buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.white)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(series=sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(series=sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.white)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 90) : color.new(color.white, 0)) : color.new(color.white, 0)
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 90) : color.new(color.white, 0)) : color.new(color.white, 0)
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")

// Buy and Sell Signals based on EMA and Supertrend
buySignalEMA = ta.crossover(close, ema) and trend == 1
sellSignalEMA = ta.crossunder(close, ema) and trend == -1

// Plot EMA
plot(ema, color=color.blue, title="20 EMA")

// Plot Buy and Sell Signals
plotshape(series=buySignalEMA, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY")
plotshape(series=sellSignalEMA, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")

// Strategy Entries and Exits
if (buySignalEMA)
    strategy.entry("Buy", strategy.long)

if (sellSignalEMA)
    strategy.close("Buy")


관련

더 많은