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

Hull 이동평균과 함께 멀티 타임프레임 볼링거 모멘텀 브레이크업 전략

저자:차오장, 날짜: 2024-11-29 17:00:00
태그:VWMAHMABBMTFRSI

img

전반적인 설명

이 전략은 거래 신호를 생성하기 위해 볼린거 밴드, 헐 이동 평균 및 가중 이동 평균을 결합한 멀티 타임프레임 분석을 기반으로 한 거래 시스템입니다. 전략은 주로 1 시간 시간 프레임에서 작동하며 5 분, 1 시간 및 3 시간 기간의 시장 데이터를 통합합니다. 여러 기술적 지표를 사용하여 거래 기회를 확인하고 역동적 인 스톱 로스 및 영리 메커니즘을 구현하며 효과적인 위험 통제를 위해 계정 자본에 기반한 위치 크기를 자동으로 조정합니다.

전략 원칙

핵심 논리는 여러 기술적 지표의 교차 확인을 기반으로합니다. 전략은 5 분 VWMA, 1 시간 VWMA 및 3 시간 HMA를 포함한 여러 시간 프레임에 걸쳐 다양한 이동 평균과 가격 관계를 모니터링합니다. 가격은 모든 시간 프레임 지표보다 높을 때 상위 임계 이상으로 떨어지면 긴 신호가 생성됩니다. 반대로, 가격이 모든 지표보다 낮을 때 하위 임계 이하로 떨어지면 짧은 신호가 발생합니다. 전략은 동적 진입 및 출입 임계치를 설정하기 위해 오차 계산을 통합하여 거래 유연성을 향상시킵니다.

전략적 장점

  1. 멀티 타임프레임 분석은 거짓 파업 위험을 줄이고 신호 신뢰성을 향상시킵니다.
  2. 동적 스톱 로스 및 취득 설정은 다른 시장 조건에 적응합니다.
  3. 계좌 자금에 기초한 포지션 사이징은 합리적인 자본 활용을 보장합니다.
  4. 다중 출구 메커니즘은 전략 적응력을 제공합니다.
  5. 그래픽 인터페이스는 분석을 위해 명확한 거래 신호 시각화를 제공합니다.
  6. 여러 성숙한 기술 지표의 통합은 거래 결정의 정확성을 향상시킵니다.

전략 위험

  1. 여러 지표가 지연된 거래 신호로 이어질 수 있습니다.
  2. 다양한 시장에서 빈번한 거짓 파업이 가능함
  3. 고정된 스톱 로스 (stop loss) 및 이윤 취득 비율은 모든 시장 조건에 적합하지 않을 수 있습니다.
  4. 다중 시간 프레임 데이터 처리 전략 복잡성을 증가시킬 수 있습니다
  5. 변동성 있는 시장에서 높은 미끄러짐 위험

최적화 방향

  1. 역동적 스톱 로스 및 영리 조정에 대한 변동성 지표를 도입
  2. 매개 변수 적응을 위한 시장 조건 인식 추가
  3. 가짜 파업 손실을 줄이기 위해 신호 필터링을 최적화하십시오.
  4. 브레이크오웃 신호 신뢰성을 향상시키기 위해 볼륨 분석을 통합하십시오.
  5. 안정성 향상을 위한 적응적 매개 변수 최적화 메커니즘 개발

요약

이 전략은 멀티 타임프레임 분석과 여러 가지 기술 지표를 통해 비교적 완전한 거래 시스템을 구축합니다. 이 전략은 신호 신뢰성과 효과적인 위험 관리에 강점을 가지고 있지만 신호 지연 및 매개 변수 최적화와 함께 과제에 직면합니다. 지속적인 개선과 최적화를 통해 전략은 다양한 시장 조건에서 안정적인 성능을 유지하는 잠재력을 보여줍니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("1H- 280, 2.7", overlay=true)


// Fetch the indicator values from different timeframes
vwma5 = request.security(syminfo.tickerid, "5", ta.wma(close, 233), lookahead = barmerge.lookahead_off)
vwma_hourly = request.security(syminfo.tickerid, "60", ta.wma(close, 89), lookahead = barmerge.lookahead_off)
hullma155_3h = request.security(syminfo.tickerid, "180", ta.hma(close, 155), lookahead = barmerge.lookahead_off)


// Calculate the deviation value
deviation = close * 0.032


// Initialize the signal variables
var float signalLine = na
var color lineColor = na


// Long Entry Conditions
longCondition_5min = close > vwma5
longCondition_hourly = close > vwma_hourly
longCondition_3h = close > hullma155_3h


// Short Entry Conditions
shortCondition_5min = close < vwma5
shortCondition_hourly = close < vwma_hourly
shortCondition_3h = close < hullma155_3h


// Long Entry
if longCondition_5min and longCondition_hourly and longCondition_3h
    signalLine := close + deviation
    lineColor := color.rgb(0, 255, 0, 1)


// Short Entry
if shortCondition_5min and shortCondition_hourly and shortCondition_3h
    signalLine := close - deviation
    lineColor := color.rgb(255, 0, 0, 1)


// Plotting the connecting line
plot(signalLine, title="Signal Line", color=lineColor, linewidth=1, style=plot.style_line)


// Colorize the signal line
bgcolor(signalLine > close ? color.rgb(0, 255, 0, 99) : color.rgb(255, 0, 0, 99), transp=90)



// Strategy settings
useTPSL = input(true, "Use TP/SL for closing long positions?")
useDownbreakOutbreak = input(false, "Use Downbreak and Outbreak for closing positions?")
useM7FClosing = input(false, "Use M7F Signal for closing positions?")


length1 = input.int(280, minval=1)
src = input(close, title="Source")
mult = input.float(2.7, minval=0.001, maxval=50, title="StdDev")


basis = ta.vwma(src, length1)
dev = mult * ta.stdev(src, length1)
upper = basis + dev
lower = basis - dev


offset = input.int(0, "Offset", minval = -500, maxval = 500)


length2 = input.int(55, minval=1)
src2 = input(close, title="Source")
hullma = ta.wma(2 * ta.wma(src2, length2 / 2) - ta.wma(src2, length2), math.floor(math.sqrt(length2)))


hullmacrosslower = ta.crossover(hullma, lower)
hullmacrossupper = ta.crossunder(hullma, upper)


breakout = ta.crossover(ohlc4, upper)
breakdown = ta.crossunder(ohlc4, upper)
outbreak = ta.crossover(ohlc4, lower)
downbreak = ta.crossunder(ohlc4, lower)


// Calculate position size and leverage
margin_pct = 1
leverage = 1
position_size = strategy.equity * margin_pct
qty = position_size / close / leverage


// Define take profit and stop loss levels
take_profit = 0.14
stop_loss = 0.06


// Opening a long position
if breakout
    strategy.entry("Long", strategy.long, qty, limit=close*(1+take_profit), stop=close*(1-stop_loss))


// Opening a short position
if downbreak
    strategy.entry("Short", strategy.short, qty, limit=close*(1-take_profit), stop=close*(1+stop_loss))


// Closing positions based on chosen method
if useTPSL
    // Using TP/SL for closing long positions
    if strategy.position_size > 0 and breakdown
        strategy.close("Long", comment="Breakdown")
else if useDownbreakOutbreak
    // Using Downbreak and Outbreak for closing positions
    if strategy.position_size > 0 and (breakdown or downbreak)
        strategy.close("Long", comment="Breakdown")
    if strategy.position_size < 0 and (outbreak or downbreak)
        strategy.close("Short", comment="Outbreak")
else if useM7FClosing
    // Using M7F Signal for closing positions
    if strategy.position_size > 0 and (signalLine < close)
        strategy.close("Long", comment="M7F Signal")
    if strategy.position_size < 0 and (signalLine > close)
        strategy.close("Short", comment="M7F Signal")


// Plotting entry signals
plotshape(hullmacrosslower, title="High Bear Volatility", style=shape.arrowup, text="^^^^^", color=color.rgb(75, 202, 79), location=location.belowbar)
plotshape(hullmacrossupper, title="High Bull Volatility", style=shape.arrowdown, text="-----", color=color.rgb(215, 72, 72), location=location.abovebar)
plotshape(breakout ? 1 : na, title="Breakout", style=shape.arrowup, text="", color=color.rgb(75, 202, 79), location=location.belowbar, size=size.tiny)
plotshape(breakdown ? 1 : na, title="Breakdown", style=shape.arrowdown, text="", color=color.rgb(201, 71, 71), location=location.abovebar, size=size.tiny)
plotshape(outbreak ? 1 : na, title="Outbreak", style=shape.arrowup, text="", color=color.rgb(0, 110, 255), location=location.belowbar, size=size.tiny)
plotshape(downbreak ? 1 : na, title="Downbreak", style=shape.arrowdown, text="", color=color.rgb(255, 111, 0), location=location.abovebar, size=size.tiny)


관련

더 많은