유동 평균과 슈퍼 트렌드에 기반한 트렌드 다음 전략

저자:차오장, 날짜: 2023-11-14 16:23:42
태그:

img

전반적인 설명

이 전략은 유동 평균과 슈퍼 트렌드 지표를 결합하여 트렌드를 추적합니다. 트렌드가 상승할 때 길고 트렌드가 하락할 때 짧습니다.

전략 논리

  1. 가중된 이동 평균 MA를 계산합니다. 기간 동안 가중된 평균 가격을 계산하기 위해 부피를 가중으로 사용하십시오.

  2. MA를 기반으로 Hull 이동 평균을 계산합니다. Hull 이동 평균은 가격 변화에 더 민감합니다.

  3. 슈퍼 트렌드 지표를 계산합니다. 슈퍼 트렌드는 트렌드 변화를 식별하기 위해 ATR을 결합합니다. 상부와 하부 대역을 계산합니다.

  4. 상단단위보다 더 가까이 갈 때, 길게 갈 때, 하단단위보다 더 가까이 갈 때, 짧게 갈 때

  5. 오픈, 클로즈, 하이 및 로우와 같은 보조 지표를 그래프하여 가격 움직임을 시각적으로 관찰합니다.

  6. 지표의 크로스오버를 기반으로 거래 결정을 내립니다.

이점 분석

  1. 이 전략은 이동 평균과 슈퍼 트렌드를 결합하여 더 정확한 트렌드 검출을 가능하게합니다.

  2. Hull Moving Average는 가격 변화에 더 민감하게 반응하여 적절한 시점에 트렌드 전환을 돕습니다.

  3. 슈퍼 트렌드는 시장의 변동성에 적응하기 위해 상위와 하위 대역을 동적으로 조정합니다.

  4. 보조 지표는 지표 신호로 의사결정을 돕기 위해 가격 움직임을 시각적으로 표시합니다.

  5. 이 전략은 이동 평균 기간, 슈퍼 트렌드 멀티플라이커 등에 대한 매개 변수 최적화를 허용합니다.

위험 분석

  1. 윙사 (Whipsaws) 는 범위에 묶인 시장에서 잘못된 신호를 생성하여 불필요한 거래를 유발할 수 있습니다.

  2. 여러 가지 지표를 모니터링하면 전략의 구현이 상대적으로 복잡해질 수 있습니다.

  3. 매개 변수들은 각기 다른 제품의 특성에 맞게 적절하게 조정되어야 합니다.

  4. 단일 포지션의 손실을 제한하기 위해 엄격한 스톱 로스가 필요합니다.

  5. 높은 거래 빈도는 위원회로부터의 영향 통제를 요구합니다.

최적화 방향

  1. 시장에 더 민감한 것을 찾기 위해 다른 이동 평균을 테스트하십시오.

  2. 다른 슈퍼 트렌드 멀티플리커를 테스트하여 트렌드 변화를 파악합니다.

  3. 변동성이 증가할 때 포지션 크기를 줄이기 위해 변동성 인덱스를 포함합니다.

  4. 범위를 제한하는 기간 동안 잘못된 신호를 피하기 위해 뷰레이크 조건을 추가합니다.

  5. 스톱 로스 전략을 최적화하여 시장 조건에 더 적응할 수 있도록 합니다.

요약

이 전략은 트렌드를 추적하기 위해 이동 평균과 슈퍼 트렌드를 모두 사용하여 트렌드 방향을 판단합니다. 이점은 더 정확한 트렌드 검출을 위해 지표들 간의 상호 검증입니다. 그러나 잘못된 신호에 주의해야 합니다. 이 전략은 매개 변수 최적화와 위험 통제를 통해 더욱 향상될 수 있습니다. 강력한 트렌드 특성을 가진 기기들에 대한 트렌드 다음 운영에 적합합니다.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © rajukpatel

//@version=5
strategy('My RK Strategy with Alert', shorttitle='My RK Strategy with Alert', overlay=true )
src5 = input(close)

tf = input(1440)
len5 = timeframe.isintraday and timeframe.multiplier >= 1 ? tf / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

ma = ta.ema(src5 * volume, len5) / ta.ema(volume, len5)


//script taken from https://www.tradingview.com/script/kChCRRZI-Hull-Moving-Average/

src1 = ma

p(src1, len5) =>
    n = 0.0
    s = 0.0
    for i = 0 to len5 - 1 by 1
        w = (len5 - i) * len5
        n += w
        s += src5[i] * w
        s
    s / n

hm = 2.0 * p(src1, math.floor(len5 / 3)) - p(src1, len5)
vhma = p(hm, math.floor(math.sqrt(len5)))
lineColor = vhma > vhma[1] ? color.lime : color.red
plot(vhma, title='VHMA', color=lineColor, linewidth=3)
hColor = true
vis = true
hu = hColor ? vhma > vhma[2] ? #00ff00 : #ff0000 : #ff9800

vl = vhma[0]
ll = vhma[1]
m1 = plot(vl, color=hu, linewidth=1, transp=60)
m2 = plot(vis ? ll : na, color=hu, linewidth=2, transp=80)

fill(m1, m2, color=hu, transp=70)
//

b = timeframe.isintraday and timeframe.multiplier >= 1 ? 60 / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7



//
res5 = input.timeframe('D')

o = request.security(syminfo.tickerid, res5, open, barmerge.gaps_off, barmerge.lookahead_on)
c = request.security(syminfo.tickerid, res5, close, barmerge.gaps_off, barmerge.lookahead_on)
hz = request.security(syminfo.tickerid, res5, high, barmerge.gaps_off, barmerge.lookahead_on)
l = request.security(syminfo.tickerid, res5, low, barmerge.gaps_off, barmerge.lookahead_on)



col = c >= o ? color.lime : color.red

ppo = plot(b ? o >= c ? hz : l : o, color=col, title='Open', style=plot.style_stepline, transp=100)
ppc = plot(b ? o <= c ? hz : l : c, color=col, title='Close', style=plot.style_stepline, transp=100)

plot(b and hz > c ? hz : na, color=col, title='High', style=plot.style_circles, linewidth=2, transp=60)
plot(b and l < c ? l : na, color=col, title='Low', style=plot.style_circles, linewidth=2, transp=60)

fill(ppo, ppc, col, transp=90)

//
// INPUTS //
st_mult = input.float(1, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01)
st_period = input.int(50, title='SuperTrend Period', minval=1)

// CALCULATIONS //
up_lev = l - st_mult * ta.atr(st_period)
dn_lev = hz + st_mult * ta.atr(st_period)

up_trend = 0.0
up_trend := c[1] > up_trend[1] ? math.max(up_lev, up_trend[1]) : up_lev

down_trend = 0.0
down_trend := c[1] < down_trend[1] ? math.min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := c > down_trend[1] ? 1 : c < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend == 1 ? up_trend : down_trend

// Plotting
//plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy = ta.crossover(c, st_line)
sell = ta.crossunder(c, st_line)
signal = input(false)

/////////////// Plotting /////////////// 
plotshape(signal and buy, style=shape.triangleup, size=size.normal, location=location.belowbar, color=color.new(color.lime, 0))
plotshape(signal and sell, style=shape.triangledown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))


if buy
    strategy.entry('My Long Entry Id', strategy.long)

if sell
    strategy.entry('My Short Entry Id', strategy.short)



더 많은