이 전략은 트렌드를 따르는 거래 시스템으로 여러 가지 기술적 지표를 결합하여 MACD, RSI, RVI, EMA의 교차 신호 및 시장 트렌드를 식별하기 위해 볼륨 확인을 사용하여 위험 관리에 대한 트레일링 스톱을 사용합니다. 전략은 특정 가격 범위 내에서 작동하며 거래 정확성과 신뢰성을 향상시키기 위해 여러 신호 조합을 사용합니다.
이 전략은 여러 가지 주요 구성 요소를 가진 다층 신호 검증 메커니즘을 사용합니다. 첫째, 전체 시장 트렌드를 결정하기 위해 20 기간 및 200 기간 기하급수 이동 평균 (EMA) 을 사용합니다. 둘째, 트렌드 전환점을 캡처하기 위해 MACD 지표 (12,26,9) 크로스오버를 사용합니다. 셋째, 상대 강도 지표 (RSI) 와 상대 변동성 지표 (RVI) 를 사용하여 과잉 구매 / 과잉 판매 조건을 확인합니다. 마지막으로, 볼륨 지표를 통해 거래를 검증합니다. 구매 조건은 동시에 만족을 필요로합니다. MACD 황금 십자, RSI 70 이하, RVI 0 이상, 양 EMA 이상의 가격 및 최소 볼륨 요구 사항. 판매 조건은 반대입니다. 전략은 또한 동적 스톱-로스 조정을 통해 이익을 보호하기 위해 후속 메커니즘을 통합합니다.
이 전략은 여러 기술적 지표의 조합을 통해 비교적 완전한 거래 시스템을 구축합니다. 특정 한계가 있지만 합리적인 매개 변수 최적화 및 리스크 관리로 전략은 좋은 실용적 가치를 가지고 있습니다. 안정성과 수익성을 높이기 위해 더 적응력 있는 메커니즘과 리스크 제어 조치를 도입하여 향후 개선이 가능합니다.
/*backtest start: 2024-10-27 00:00:00 end: 2024-11-26 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MACD/RSI/RVI/EMA20-200/Volume BTC Auto Trading Bot", overlay=true, margin_long=100, margin_short=100) // Parámetros de EMA ema20Length = input(20, title="EMA 20 Length") ema200Length = input(200, title="EMA 200 Length") // Parámetros de MACD macdFastLength = input(12, title="MACD Fast Length") macdSlowLength = input(26, title="MACD Slow Length") macdSignalSmoothing = input(9, title="MACD Signal Smoothing") // Parámetros de RSI y RVI rsiLength = input(14, title="RSI Length") rviLength = input(14, title="RVI Length") // Volumen mínimo para operar minVolume = input(100, title="Min Volume to Enter Trade") // Rango de precios de BTC entre 60k y 80k minPrice = 60000 maxPrice = 80000 // Rango de precios BTC inPriceRange = close >= minPrice and close <= maxPrice // Cálculo de las EMAs ema20 = ta.ema(close, ema20Length) ema200 = ta.ema(close, ema200Length) plot(ema20, color=color.green, title="EMA 20") plot(ema200, color=color.red, title="EMA 200") // Cálculo del MACD [macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalSmoothing) macdHist = macdLine - signalLine plot(macdLine, color=color.blue, title="MACD Line") plot(signalLine, color=color.orange, title="Signal Line") hline(0, "MACD Zero Line", color=color.gray) plot(macdHist, style=plot.style_histogram, color=(macdHist >= 0 ? color.green : color.red), title="MACD Histogram") // Cálculo del RSI rsi = ta.rsi(close, rsiLength) hline(70, "RSI Overbought", color=color.red) hline(30, "RSI Oversold", color=color.green) plot(rsi, color=color.purple, title="RSI") // Cálculo del RVI numerator = (close - open) + 2 * (close[1] - open[1]) + 2 * (close[2] - open[2]) + (close[3] - open[3]) denominator = (high - low) + 2 * (high[1] - low[1]) + 2 * (high[2] - low[2]) + (high[3] - low[3]) rvi = ta.sma(numerator / denominator, rviLength) plot(rvi, color=color.blue, title="RVI") // Volumen volumeCondition = volume > minVolume // Condiciones de compra bullishCondition = ta.crossover(macdLine, signalLine) and rsi < 70 and rvi > 0 and close > ema20 and close > ema200 and inPriceRange and volumeCondition // Condiciones de venta bearishCondition = ta.crossunder(macdLine, signalLine) and rsi > 30 and rvi < 0 and close < ema20 and close < ema200 and inPriceRange and volumeCondition // Configuración del trailing stop loss trail_stop = input(true, title="Enable Trailing Stop") trail_offset = input.float(0.5, title="Trailing Stop Offset (%)", step=0.1) // Funciones para la gestión del Trailing Stop Loss if (bullishCondition) strategy.entry("Buy", strategy.long) var float highestPrice = na highestPrice := na(highestPrice) ? high : math.max(high, highestPrice) strategy.exit("Trailing Stop", "Buy", stop=highestPrice * (1 - trail_offset / 100)) if (bearishCondition) strategy.entry("Sell", strategy.short) var float lowestPrice = na lowestPrice := na(lowestPrice) ? low : math.min(low, lowestPrice) strategy.exit("Trailing Stop", "Sell", stop=lowestPrice * (1 + trail_offset / 100)) plotshape(bullishCondition, title="Buy Signal", location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text="BUY") plotshape(bearishCondition, title="Sell Signal", location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text="SELL")