Эта стратегия является торговой системой, следующей за трендом, которая сочетает в себе несколько технических индикаторов, используя перекрестные сигналы от 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")