이동 평균 추세 추종 전략


생성 날짜: 2023-11-06 10:34:19 마지막으로 수정됨: 2023-11-06 10:34:19
복사: 0 클릭수: 721
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이동 평균 추세 추종 전략

개요

트렌드 추적 전략은 이동 평균을 기반으로 한 트렌드 추적 거래 전략이다. 이 전략은 지수 이동 평균 ((EMA) 와 흔들림 이동 평균 ((HMA) 의 교차를 사용하여 시장의 경향 방향을 판단하고 그에 따라 구매 및 판매 신호를 생성한다. 전략은 중단계 트렌드 거래에 적용되며, 단기적인 흔들림이 아닌 더 긴 기간의 주기적인 가격 추세를 추적하는 데 사용됩니다.

전략 원칙

이 전략은 두 가지 다른 파라미터의 이동 평균을 사용합니다: 짧은 주기의 EMA와 긴 주기의 HMA. EMA는 짧은 기간의 추세를 판단하기 위해 가격 변화에 더 빨리 반응합니다. HMA는 장기간의 추세 방향을 판단하기 위해 가격 변화에 더 느리게 반응합니다.

단기 EMA 상에서 장기 HMA를 넘으면, 가격이 상승 추세에 진입하는 것으로 간주되며, 이 전략은 다음 K 라인 오픈 시 시 시가격으로 구매할 것입니다. 단기 EMA 아래에서 장기 HMA를 넘으면, 가격이 하향 추세에 진입하는 것으로 간주되며, 이 전략은 다음 K 라인 오픈 시 시가격으로 판매 할 것입니다.

출시 시기를 최적화하기 위해 전략에 Heikin-Ashi 기반의 옵션이 추가되었다. 이 옵션을 활성화하면 전략의 거래 신호는 원시 K선 대신 Heikin-Ashi 선에 기반을 두게 된다. Heikin-Ashi 선이 오실로터의 원시 K선을 필터링 할 수 있기 때문에 가짜 신호를 줄이는 데 도움이 된다.

이 전략은 또한 중지 손실 설정을 추가했다. 지주 손실이 기본 중지 손실을 달성하면 전략은 시장 가격으로 중단된다. 이 조치는 단일 거래의 최대 손실을 제한한다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. EMA와 HMA의 교차 판단 트렌드 방향을 사용하여, 다른 주기 평균의 장점을 활용하여 판단 정확도를 높일 수 있다.

  2. 트렌드 트레이딩을 기반으로, 작은 흔들림과 함께 포지션을 반전하지 않고, 불필요한 트레이딩을 줄일 수 있다.

  3. Heikin-Ashi 옵션은 가짜 신호를 필터링하여 시판 시기를 최적화합니다.

  4. 이동식 중지 전략은 단일 거래의 최대 손실을 효과적으로 제어할 수 있습니다.

  5. 정책 매개 변수는 사용자 정의 가능하며, 사용자가 다른 품종과 주기에 따라 조정하여 적응력을 높일 수 있습니다.

위험 분석

이 전략에는 다음과 같은 위험도 있습니다.

  1. 트렌드 추적 전략으로 종합시장에서는 좋지 않은 성적을 냈다.

  2. 하지만, 이 모든 것은 유행이 바뀌면 더 큰 손실을 초래할 수 있다.

  3. 부적절하게 설정된 정지는 불필요한 정지를 초래할 수도 있고, 손실을 확대시킬 수도 있다.

  4. 변수 설정이 잘못되면 거래가 자주 또는 완전히 멈출 수 있습니다.

  5. EMA와 HMA 주기 설정은 다른 품종과 주기에 대해 최적화해야 한다.

  6. 은 아쉬는 가짜 침입의 위험을 완전히 차단할 수 없습니다.

최적화 방향

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

  1. MACD, KDJ 등과 같은 더 많은 지표 조합 판단 트렌드를 사용하여 판단 정확도를 향상시킵니다.

  2. 더 많은 필터링 조건, 예를 들어 거래량, ATR 등의 지표가 추가되어 가짜 돌파의 확률이 낮아집니다.

  3. 이동 평균의 파라미터를 최적화하여 다양한 품종과 거래 주기에 더 적합하게 만듭니다.

  4. 스톱 손실을 더 합리적으로 설정하여 너무 느슨하거나 너무 딱딱하지 않도록 스톱 손실을 최적화하십시오.

  5. 이윤 보호 기능을 추가하는 것을 고려해 보세요.

  6. 다른 대안적인 포지션 비용 계산 방법을 테스트하고 포지션 비용 계산을 최적화하십시오.

요약하다

트렌드 추적 전략은 이동 평균을 교차하여 트렌드 방향을 판단하고, Heikin-Ashi와 이동 스톱을 사용하여 전략 성능을 최적화한다. 이 전략은 중장선 트렌드를 추적하는 데 적합하며, 파라미터 최적화 및 기능 확장을 통해 전략 효과를 더욱 향상시킬 수 있다. 그러나 사용자는 반전 및 스톱 위험의 존재를 인식해야하며, 품종과 주기에 대한 파라미터 테스트가 필요합니다.

전략 소스 코드
/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("𝐉𝐔𝐈𝐂𝐘 𝐓𝐑𝐄𝐍𝐃", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=15)

//Heikin Ashi Option
ha = input(true, title = "Heikin Ashi Source")
src = ha ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, barmerge.gaps_off, barmerge.lookahead_off) : close
usestoploss = input(true, title="Stop Loss")

//EMA
len1 = input.int(9, minval=1, title="EMA Length")
ema = ta.ema(src, len1)
emaline = plot(ema, title="EMA", color=color.blue, linewidth=2)

//HMA
len2 = input.int(69, minval=1, title="HMA Length")
hma = ta.wma(2*ta.wma(src, len2/2)-ta.wma(src, len2), math.floor(math.sqrt(len2)))
hmaline = plot(hma, title="HMA", color=color.purple, linewidth=2)
fillcolor = hma < ema ? color.blue : color.purple
fill(emaline, hmaline, title="EMA Fill", color=color.new(fillcolor, 80), editable=true)

//Stop Loss Conditions
stoplosspercent = input.float(title="Stop Loss (%)", defval=-6.5, minval=-50, maxval=0, step=.1) / 100
stoploss = strategy.position_avg_price * (1 + stoplosspercent)
stop = stoploss > close and stoploss[1] < close[1] and strategy.position_size > 0 and usestoploss

//Buy Sell Conditions
buy = hma < ema
sell = hma > ema

//Trades and Alerts
if buy
	strategy.entry("Long Position", strategy.long, comment="BUY")
//	alert("{\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar)
if sell and strategy.openprofit > 0
	strategy.close("Long Position", comment="SELL")
//	alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar)
if stop
    strategy.close("Long Position", comment="STOP")
//    alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar)

//Alternate Labels
var pos = 0
if buy and pos <= 0
    pos := 1
if sell and pos >= 0
    pos := -1
buylabel  = pos ==  1 and (pos !=  1)[1]
selllabel = pos == -1 and (pos != -1)[1]

//Plot Labels
plotshape(buylabel,  style=shape.labelup,   location=location.belowbar, color=color.blue,   text="BUY",  textcolor=color.white, size=size.tiny)
plotshape(selllabel, style=shape.labeldown, location=location.abovebar, color=color.purple, text="SELL", textcolor=color.white, size=size.tiny)
plotshape(stop,      style=shape.labeldown, location=location.abovebar, color=color.yellow, text="STOP", textcolor=color.white, size=size.tiny)