트리플 EMA 트렌드 전략

저자:차오장, 날짜: 2023-12-20 15:00:44
태그:

img

전반적인 설명

트리플 EMA 트렌드 다음 전략은 시장 트렌드를 추적하는 데 매우 적합한 전략입니다. 충분한 트렌드 확인이있을 때 긴 또는 짧은 포지션을 설정하기 위해 다른 기간의 세 개의 EMA를 거래 신호로 사용합니다.

이 전략의 장점은 잘못된 신호를 줄일 수 있고, 포지션에 들어가기 전에 충분한 트렌드 강도를 보장할 수 있다는 것입니다. 동시에, 시장 변동성에 따라 트레일 스톱을 할 수 있는 적응성 있는 스톱 손실 시스템을 갖추고 있으며, 따라서 더 나은 리스크 관리를 달성할 수 있습니다.

전략 논리

엔트리 로직

이 전략은 7~14~21주기 EMA를 입시 신호 지표로 사용한다. 구체적인 논리는 가격이 세 EMA를 동시에 넘으면, 장거리; 가격이 세 EMA를 동시에 넘으면, 단기이다.

이 디자인은 잘못된 신호를 줄이고 진입하기 전에 트렌드가 충분히 명확하다는 것을 보장 할 수 있습니다. 또한 세 EMA 기간은 시장 트렌드를 적시에 포착하기 위해 적절하게 설정됩니다.

스톱 로스 방법

이 전략은 ATR 및 최대 드래다운에 기반한 적응형 스톱 로스 시스템을 사용합니다. 실시간으로 가격 변동성을 계산하고 이에 따라 스톱 로스 라인을 설정합니다. 구체적으로, 스톱 로스 버퍼 구역으로 ATR의 특정 배수를 계산합니다.

상승 추세 중, 스톱 로스 라인은 새로운 최고치를 따라가며 좋은 추격 효과를 얻을 수 있습니다. 가격이 버퍼 구역의 낮은 지점으로 떨어지면 스톱 로스 라인은 포지션을 닫기 위해 트리거됩니다. 이것은 시장 조건에 따라 스톱 로스 위험을 제어 할 수 있습니다.

이윤 취득 방법

이 전략은 일정한 비율의 수익을 취하는 방법을 사용합니다. 포지션을 열면 입시 가격보다 특정 비율로 수익을 취하는 라인이 설정됩니다. 가격이 수익을 취하는 라인까지 상승하면 포지션은 수익을 취하기 위해 닫을 것입니다.

이 고정된 영업이익 비율의 장점은 달성 된 경우 출출을 만족시킬 목표 수익 수준을 미리 설정 할 수 있다는 것입니다. 또한 가격이 다시 떨어질 위험을 피합니다. 영업이익 비율은 필요에 따라 조정 할 수 있습니다.

이점 분석

  • 잘못된 신호를 줄이고 포지션을 열고 비교적 강한 가격 추세를 보장 할 수 있습니다.
  • 시장 트렌드를 빠르게 파악하기 위해 EMA 기간의 중복을 사용합니다.
  • 적응적인 스톱 로스 시스템은 변동성에 기반한 위험을 제어할 수 있습니다.
  • 일정한 수익률은 종료 전에 수익 목표를 충족합니다.
  • ATR에 기반한 스톱 로스 메소드 및 최대 드라운드는 시장 조건에 따라 최적화 될 수 있습니다.
  • 매개 변수를 변경하여 전략 스타일을 쉽게 조정

위험 분석

  • 다양한 시장에서 EMA는 종종 교차를 일으킬 수 있으며 쉽게 함락됩니다.
  • 고정 취득이익은 시장 조건에 따라 조정할 수 없으며, 더 큰 이윤을 놓칠 수 있거나 손실을 증가시킬 수 있습니다.
  • 스톱 트래킹 스톱 손실 후 다시 새로운 최고치를 추적 할 수 없습니다, 가격 하락 손실을 증가시킬 수 있습니다
  • 일방적인 폭발적인 추세에서, 고정된 수익률은 너무 보수적일 수 있으며, 충분한 수익을 얻지 못합니다.

트렌드 판단 지표와 결합하여 불안정한 시장에서 순식간에 포지션을 개척하는 것을 피할 수 있습니다. 또한 수익을 취하거나 수익률 비율 방법을 이동하여 수익을 취하는 방법을 더 유연하게 만들 수 있습니다. 일반적으로 전략 적용과 협력하기 위해 수동 판단이 여전히 필요합니다.

최적화 방향

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

  1. MACD, KD 등과 같은 입시 시기를 결정하기 위해 더 많은 지표를 사용하십시오. 변동적인 시장에 갇히지 않도록하십시오.

  2. 이윤을 취하는 방법을 더 유연하게 만들기 위해 이윤 비율을 바꾸어 보세요.

  3. 스톱 로스 메소드에 하향 트레일 메커니즘을 추가하여 가격이 다시 떨어지면 다시 낮은 지점을 추적하여 위험을 제어 할 수 있습니다.

  4. 다른 제품의 특성에 따라 EMA 기간 매개 변수를 조정하여 트렌드 판단을 최적화합니다.

  5. 포지션 사이징 모듈을 추가하면 자금 사용 비율에 따라 거래 크기에 따라 조정할 수 있습니다.

결론

트리플 EMA 트렌드 다음 전략은 매우 실용적인 트렌드 다음 전략이다. 강력한 트렌드 판단 기능을 가지고 있으며, 자동으로 주문을 관리 할 수있는 적응적 인 수익 및 스톱 로스 메커니즘을 가지고 있습니다. 최적화 관점에서, 수익 및 스톱 로스 시스템은 실시간 시장 조건에 따라 조정 할 수 있습니다. 그러나 전반적으로이 전략은 구현하기 쉽고 제어 할 수있는 위험 선택입니다.


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

//@version=4
strategy(shorttitle='Three EMAs Trend-following Strategy',title='Three EMAs Trend-following Strategy (by Coinrule)', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)


//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

ema_1 = ema(close, input(7))
ema_2 = ema(close, input(12))
ema_3 = ema(close, input(21))

Take_profit= ((input (4))/100)

longTakeProfit = strategy.position_avg_price * (1 + Take_profit)


length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)

go_long = crossover(close, ema_1) and crossover(close, ema_2) and crossover(close, ema_3)



closeLong = close > longTakeProfit or crossunder(close, vStop)



//Entry 
strategy.entry(id="long", long = true, when = go_long and window())



//Exit
strategy.close("long", when = closeLong and window())

plot(vStop,"Vstop", color.black, linewidth=2)
plot(ema_1,"EMA Short", color.green, linewidth=1)
plot(ema_2,"EMA Mid", color.purple, linewidth=1)
plot(ema_3,"EMA Long", color.red, linewidth=1)



더 많은