이 전략은 거래 신호를 생성하기 위해 볼린거 밴드, 헐 이동 평균 및 가중 이동 평균을 결합한 멀티 타임프레임 분석을 기반으로 한 거래 시스템입니다. 전략은 주로 1 시간 시간 프레임에서 작동하며 5 분, 1 시간 및 3 시간 기간의 시장 데이터를 통합합니다. 여러 기술적 지표를 사용하여 거래 기회를 확인하고 역동적 인 스톱 로스 및 영리 메커니즘을 구현하며 효과적인 위험 통제를 위해 계정 자본에 기반한 위치 크기를 자동으로 조정합니다.
핵심 논리는 여러 기술적 지표의 교차 확인을 기반으로합니다. 전략은 5 분 VWMA, 1 시간 VWMA 및 3 시간 HMA를 포함한 여러 시간 프레임에 걸쳐 다양한 이동 평균과 가격 관계를 모니터링합니다. 가격은 모든 시간 프레임 지표보다 높을 때 상위 임계 이상으로 떨어지면 긴 신호가 생성됩니다. 반대로, 가격이 모든 지표보다 낮을 때 하위 임계 이하로 떨어지면 짧은 신호가 발생합니다. 전략은 동적 진입 및 출입 임계치를 설정하기 위해 오차 계산을 통합하여 거래 유연성을 향상시킵니다.
이 전략은 멀티 타임프레임 분석과 여러 가지 기술 지표를 통해 비교적 완전한 거래 시스템을 구축합니다. 이 전략은 신호 신뢰성과 효과적인 위험 관리에 강점을 가지고 있지만 신호 지연 및 매개 변수 최적화와 함께 과제에 직면합니다. 지속적인 개선과 최적화를 통해 전략은 다양한 시장 조건에서 안정적인 성능을 유지하는 잠재력을 보여줍니다.
/*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)